为什么docker命令要使用 sudo?
Docker 守候进程绑定的是一个 unix socket,而不是 TCP 端口。这个套接字默认的属主是 root,其他是用户可以使用 sudo 命令来访问这个套接字文件。因为这个原因,docker 服务进程都是以 root 帐号的身份运行的。
怎么避免sudo?
为了避免每次运行 docker 命令的时候都需要输入 sudo,可以创建一个 docker 用户组,并把相应的用户添加到这个分组里面。当 docker 进程启动的时候,会设置该套接字可以被 docker 这个分组的用户读写。这样只要是在 docker 这个组里面的用户就可以直接执行 docker 命令了,这就是大概的原理。实测在 ubuntu16 中安装了最新的 docker 是会自动创建一个 docker 用户组的。
- 首先查看是否已经存在 docker 分组
1 | sudo cat /etc/group | grep docker |
- 如果没有 docker 分组,创建 docker 分组
1 | sudo groupadd -g 999 docker |
-g 999 为组 ID,也可以不指定
- 将用户添加到 docker 分组
1 | sudo usermod -aG docker <username> |
- 修改守护进程绑定的套接字的权限,能够被 docker 分组访问
1 | sudo chmod a+rw /var/run/docker.sock |
- 退出当前用户登陆状态,然后重新登录,以便让权限生效,或重启 docker-daemon
1 | sudo systemctl restart docker |
- 确认你可以直接运行 docker 命令,执行 docker 命令
1 | docker info |
注意:该 docker 分组等同于 root 帐号,具体的详情可以参考这篇文章:Docker Daemon Attack Surface。
docker 官方教程
Leave a comment