代码之家  ›  专栏  ›  技术社区  ›  PercySherlock

如何以非根用户身份运行docker?[副本]

  •  0
  • PercySherlock  · 技术社区  · 3 年前

    我在有Ubuntu操作系统的机器上安装了Docker。
    当我跑步时:

    sudo docker run hello-world
    

    一切都很好,但我想隐藏 sudo 命令以缩短命令。
    如果我在没有 苏多

    docker run hello-world
    

    显示以下内容:

    docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.
    

    当我尝试跑步时也会发生同样的情况:

    docker-compose up
    

    如何解决此问题?

    0 回复  |  直到 3 年前
        1
  •  21
  •   Asclepius    3 年前

    如果要以非根用户身份运行docker,则需要将其添加到docker组。

    1. 创建docker组(如果不存在)
    $ sudo groupadd docker
    
    1. 将您的用户添加到docker组。
    $ sudo usermod -aG docker $USER
    
    1. 运行以下命令或注销并再次登录并运行(这不起作用,您可能需要先重新启动计算机)
    $ newgrp docker
    
    
    1. 检查docker是否可以在没有root的情况下运行
    $ docker run hello-world
    

    如果仍有错误,请重新启动

    $ reboot
    

    警告

    docker组授予与根用户相等的权限。有关这如何影响系统安全性的详细信息,请参阅 Docker Daemon Attack Surface. .

    摘自docker官方文件: manage-docker-as-a-non-root-user

        2
  •  11
  •   Md. Shahariar Hossen    3 年前

    升级后,我的权限被拒绝。 执行“mkb”的步骤 post install steps 没有任何更改,因为我的用户已经在“docker”组中;我以任何方式重试了两次,都没有成功。

    经过一个小时的搜索,以下解决方案最终奏效:

    sudo chmod 666 /var/run/docker.sock
    

    解决方案来自 Olshansk .

    看起来升级没有为“docker”组提供足够的权限就重新创建了套接字。

    问题

    这很难 chmod公司 打开安全漏洞,每次重新启动后,此错误会反复出现,每次都必须重新执行上述命令。我想要一个一劳永逸的解决方案。因此,您有两个问题:

    • 1) 问题在于 SystemD :将仅使用所有者“root”和组“root”创建套接字。

      您可以使用以下命令检查第一个问题:

      ls -l /lib/systemd/system/docker.socket
      

      如果这一切都很好,你应该看看' root/docker '不是' root/root '.

    • 2 ) 问题在于 图形化登录 : https://superuser.com/questions/1348196/why-my-linux-account-only-belongs-to-one-group

      您可以使用以下命令检查第二个问题:

      groups
      

      如果一切正常,您应该看到 码头工人 列表中的组。 如果没有,请尝试该命令

      sudo su $USER  -c groups
      

      如果你看到 码头工人 分组这是因为错误。

    解决

    如果您设法获得图形化登录的解决方法,则应执行以下操作:

    sudo chgrp docker /lib/systemd/system/docker.socket
    sudo chmod g+w /lib/systemd/system/docker.socket
    

    但如果您无法管理此bug,那么一个不错的解决方案可能是:

    sudo chgrp $USER /lib/systemd/system/docker.socket
    sudo chmod g+w /lib/systemd/system/docker.socket
    

    这是因为您处于图形环境中,并且可能是计算机上的唯一用户。 在这两种情况下,您都需要重新启动(或 sudo chmod 666 /var/run/docker.sock )

        3
  •  10
  •   aran    4 年前
    1. 添加docker组
    $ sudo groupadd docker
    
    1. 将当前用户添加到docker组
    $ sudo usermod -aG docker $USER
    
    1. 将会话切换到docker组
    $ newgrp - docker
    
    1. 运行示例进行测试
    $ docker run hello-world
    
        4
  •  4
  •   jmunsch Colin Pickard    3 年前
    1. 将当前用户添加到 docker
    sudo usermod -aG docker $USER
    
    1. 更改docker socket的权限以能够连接 到docker守护程序 /var/run/docker.sock
    sudo chmod 666 /var/run/docker.sock
    
        5
  •  3
  •   Leo Rocca    4 年前

    我使用以下命令解决此错误:

    $ sudo chmod 666 /var/run/docker.sock
    
        6
  •  1
  •   zanko    4 年前

    它只需要更改sock文件的权限。

    sudo chmod 666 /var/run/docker.sock
    

    这肯定会奏效的。

        7
  •  1
  •   Mostafa Wael    3 年前

    你可以随时尝试 Manage Docker as a non-root user 中的段落 https://docs.docker.com/install/linux/linux-postinstall/ 文档。

    执行此操作后,如果问题仍然存在,则可以运行以下命令来解决问题:

    sudo chmod 666 /var/run/docker.sock
    
        8
  •  1
  •   Sathiamoorthy    3 年前

    修复Docker问题:(权限被拒绝)

    • 创建docker组(如果不存在): sudo groupadd docker
    • 请参阅可用系统中的超级用户数: grep -Po '^sudo.+:\K.*$' /etc/group
    • 在linux命令shell中导出用户: export USER=demoUser
    • 将用户添加到docker组: sudo usermod -aG docker $USER
    • 运行以下命令/登录或注销: newgrp docker
    • 检查docker是否正常运行: docker run hello-world
    • 如果仍然出现错误,请重新启动: reboot

    如果不起作用,请运行以下命令:

    sudo chmod 660 /var/run/docker.sock

        9
  •  0
  •   Damir    4 年前

    尝试连接到位于的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock:收到 http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json :拨打unix/var/run/docker。sock:连接:权限被拒绝

    sudo chmod 666 /var/run/docker.sock
    

    这解决了我的问题。

        10
  •  0
  •   deeps    4 年前

    我们总是忘记 ACLs . 看见 setfacl .


    sudo setfacl -m user:$USER:rw /var/run/docker.sock

        11
  •  0
  •   user18558102    2 年前

    为了解决这个问题,我搜索了docker和docker compose的安装位置。就我而言, docker 已安装在中 /usr/bin/docker docker-compose 已安装在中 /usr/local/bin/docker-compose 路径然后,我在终端上写下:

    致docker:

    sudo chmod +x /usr/bin/docker
    

    docker编写 :

    sudo chmod +x /usr/local/bin/docker-compose
    

    现在我不需要在我的命令里写docker这个词 sudo

    /***********************************************************************/

    勘误表:

    该问题的最佳解决方案由@mkasberg评论。我引用评论:

    That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

        12
  •  0
  •   Igor B    2 年前

    说真的,伙计们。不要在您的组中添加Docker或修改socket posix(没有强化SELinux),这是创建根权限的简单方法。只需在中添加别名。bashrc,它更简单、更安全:alias dc='sudo docker'。