【问题标题】:Can't add user to docker group无法将用户添加到 docker 组
【发布时间】:2019-10-11 19:43:54
【问题描述】:

我正在尝试在新系统上设置 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

按照文档,我试过了:

sudo usermod -a -G docker $USER

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

groups
=> mark adm cdrom sudo dip plugdev lpadmin sambashare

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

less /etc/group | grep docker
=> docker:x:131:mark

并且可以看到它拥有一个在错误消息状态下运行的套接字:

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

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

【问题讨论】:

  • 我相信您需要登录/重新启动才能完成更改。
  • 你的想法是正确的,谢谢!
  • 在 Ubuntu 20.04 上,就我而言,“登录/重启”字面意思是我需要 _reboot_ 才能使更改生效,而不仅仅是重新启动 bash 会话。哇塞。

标签: linux ubuntu usergroups


【解决方案1】:

在运行 $docker info 之前,请确保 docker 服务已经启动。

如果没有,请通过运行以下命令启动服务。

$service docker start

现在你检查 $docker 信息

【讨论】:

    【解决方案2】:

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

    例如

    sudo usermod -aG docker $USER
    sudo reboot
    

    查看@4Z4T4R 答案并点赞 https://stackoverflow.com/a/66297855/7961500

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

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

    exec su -l $USER

    这将创建一个包含已加载更改的新子外壳,并用它替换您当前的外壳。

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

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

    export my_group=$(id -gn)
    newgrp docker
    newgrp $my_group
    

    文档

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

    【讨论】:

    • 重新启动 shell 对我不起作用,但 newgrp docker 起作用了。知道为什么会这样吗?
    • ubuntu 20.04 上的相同问题,newgrp docker 似乎对我有用。 sudo usermod -a -G docker $USER 似乎可以定期工作,但重启后该组丢失了。
    • 在 Ubuntu 19.10 上完全相同的问题,对我来说只有 newgrp docker 修复了它,但它不是持久的
    • newgrp 命令与usermod -aG GROUP USER非常不同:后者添加组 GROUP 到 USER,而不改变 USER 的主要组; newgrp 创建一个新的 shell 并且在该 shell 中,用户的 primary 组更改为 GROUP!这可能不是预期的效果:OP 仍然希望 USER 创建的文件属于用户的主要 GROUP,但希望 GROUP 拥有的文件可供 USER 访问。完全不同。
    • 没错,我更新了帖子以帮助保持相同的行为。这不是解决此问题的理想方法,但如果没有其他方法对您有用,它是最后的选择。在这一点上,甚至官方 docker 文档也建议这样做。我添加了帖子的链接。
    【解决方案3】:

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

    $ sudo usermod -aG docker $USER
    

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

    当然,newgrp docker 无需重启/重新启动/重新进行任何操作即可“即时”执行此操作...但是一旦会话终止,POOF 你不在docker 中不再分组。

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

    信用应该去@Omari Celestine 寻求建议,但因为我不擅长解释,我(也许你)需要这个答案提供的字面消歧。

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 2019-05-10
      • 1970-01-01
      • 2016-12-01
      • 2021-10-03
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多