无法将用户添加到 docker 组

Mar*_*ark 17 linux ubuntu usergroups

我正在尝试在新系统上设置 docker,当运行 docker info 时,我得到:

docker -v
=> Docker version 18.09.5, build e8ff056

docker info
=> Got permission denied while trying to connect to the Docker daemon
   socket at unix:///var/run/docker.sock: Get
   http://%2Fvar%2Frun%2Fdocker.sock/v1.39/info: dial unix 
   /var/run/docker.sock: connect: permission denied
Run Code Online (Sandbox Code Playgroud)

按照文档,我尝试过:

sudo usermod -a -G docker $USER
Run Code Online (Sandbox Code Playgroud)

不返回任何输出。当我然后运行组时:

groups
=> mark adm cdrom sudo dip plugdev lpadmin sambashare
Run Code Online (Sandbox Code Playgroud)

我可以看到一个 docker 组存在:

less /etc/group | grep docker
=> docker:x:131:mark
Run Code Online (Sandbox Code Playgroud)

并且可以看到它拥有一个正在运行的套接字,错误消息指出:

ls -la /var/run/ | grep docker
=> 
drwx------  5 root                root                 120 May 25 14:54 docker
-rw-r--r--  1 root                root                   5 May 25 14:54 docker.pid
srw-rw----  1 root                docker                 0 May 25 14:54 docker.sock
Run Code Online (Sandbox Code Playgroud)

那么为什么我不能将自己添加到该组中sudo usermod -a -G docker $USER呢?

Lou*_*uis 20

您需要重新加载 shell 以使更改生效。通常,您需要重新启动 shell 进程,甚至可能需要重新启动计算机。

例如

sudo usermod -aG docker $USER
sudo reboot
Run Code Online (Sandbox Code Playgroud)

请参阅@4Z4T4R 答案并大拇指 /sf/answers/4640849881/

在不退出 shell 的情况下加载更改

为了避免启动一个新的 shell,你可以运行。(似乎不适用于所有环境)

exec su -l $USER

这将使用加载的更改创建一个新的子 shell,并用它替换您当前的 shell。

如果没有其他方法适合您。

如果您现在只需要让它工作,另一种方法是更改​​您的主要组。这只是一个临时解决方案,对于任何新外壳,您都需要再次应用它。

export my_group=$(id -gn)
newgrp docker
newgrp $my_group
Run Code Online (Sandbox Code Playgroud)

文档

您还可以在此处查看官方文档 https://docs.docker.com/engine/install/linux-postinstall/

  • 重新启动 shell 对我不起作用,但 `newgrp docker` 可以。知道为什么会发生这种情况吗? (3认同)
  • `newgrp` 命令与 `usermod -aG GROUP USER` 非常不同:后者将组 GROUP 添加到 USER,而不更改 USER 的主要组;newgrp 创建一个新的 *shell*,在该 shell 中,用户的 *primary* 组更改为 GROUP!这不太可能是预期的效果:OP 仍然希望 USER 创建的文件属于用户的主 GROUP,但希望 USER 可以访问 GROUP 拥有的文件。非常完全不同。 (3认同)
  • ubuntu 20.04 上有同样的问题,“newgrp docker”似乎对我有用。`sudo usermod -a -G docker $USER` 似乎定期工作,但重新启动后该组丢失了。 (2认同)

aza*_*tar 5

就我而言,在 Ubuntu 20.04 上,sudo reboot在此命令之后运行:

$ sudo usermod -aG docker $USER
Run Code Online (Sandbox Code Playgroud)

我确实需要重新启动我的操作系统(和机器)才能使更改生效。重新启动/重新加载 bash 会话未应用新设置。

当然,newgrp docker在没有重新启动/重新启动/重新启动任何事情的情况下“即时”使用技巧......但是一旦会话终止,POOF你就不再在docker组中了。

将此添加为正式答案,因为它真正解决了 OP 和我的(相同)问题。

应该归功于@Omari Celestine 的建议,但因为我的解释很烂,我(也许你)需要这个答案提供的字面消歧。