docker.sock权限被拒绝

时间:2018-02-01 17:07:33

标签: linux docker

当我尝试运行简单的docker命令时:

$ docker ps -a

我收到错误消息:

  

获得权限拒绝... /var/run/docker.sock:connect:权限被拒绝

当我用

检查权限时
$ ls -al /var/run/

我看到这一行:

srw-rw---- root docker docker.sock

所以,我遵循许多论坛的建议并将本地用户添加到docker组:

$ sudo usermod -aG docker $USER

但它没有帮助。我仍然得到相同的错误消息。我该如何解决?

10 个答案:

答案 0 :(得分:63)

对于shell新手,命令:

$ sudo usermod -aG docker $USER

需要在shell中定义$USER。默认情况下通常会出现这种情况,但您可能需要在某些shell中将值设置为登录ID。

更改用户组不会更改用户已打开的现有登录名,终端和shell。要避免再次执行登录,您只需运行:

$ newgrp docker

访问当前shell中的该组。

完成此操作后,用户将有效地在服务器上拥有root访问权限,因此只对受信任且具有不受限制的sudo访问权限的用户执行此操作。

答案 1 :(得分:4)

  1. 确保已设置$ USER变量
  

$ echo $ USER

     

$ sudo usermod -aG docker $ USER

  1. 注销
  2. 登录后,重新启动docker服务
  

$ sudo systemctl重新启动docker

     

$ docker ps

答案 2 :(得分:2)

As mentioned earlier in the comment the changes won't apply until your re-login. If you were doing a SSH and opening a new terminal, it would have worked in new terminal

But since you were using GUI and opening the new terminal the changes were not applied. That is the reason the error didn't go away

So below command did do its job, its just a re-login was missed

sudo usermod -aG docker $USER

答案 3 :(得分:2)

原因:该错误消息表示当前用户无法访问docker引擎,因为该用户没有足够的权限来访问UNIX套接字以与该引擎进行通信。

快速修复:

  1. 使用sudo以root身份运行命令。
      

    即-sudo docker ps

  2. 更改当前用户的/var/run/docker.sock权限。
      

    即-sudo chmod 777 /var/run/docker.sock

永久解决方案:

将当前用户添加到docker组。可以通过键入

来实现
  

sudo usermod -a -G泊坞窗$ USER


注意:您必须先注销然后重新登录才能使更改生效。

答案 4 :(得分:1)

答案 5 :(得分:1)

以root用户身份扑向容器 docker exec -it --user root <dc5> bash

创建docker组(如果尚未创建) groupadd -g 999 docker

将用户添加到Docker组 usermod -aG docker jenkins

更改权限 chmod 777 /var/run/docker.sock

答案 6 :(得分:1)

<块引用>

当我尝试运行简单的 docker 命令时,例如:$ docker ps -a

我收到一条错误消息:Got permission denied ... /var/run/docker.sock: connect: permission denied

[...] 我该如何解决?

TL;DR:有两种方法(第一种方法,也在问题本身中提到,其他答案广泛解决,但存在安全问题;所以我将详细说明这个问题,并开发第二个解决方案,该解决方案也适用于这个相当合理的用例)。


回想一下上下文,Docker 守护进程套接字归 root:docker 所有:

$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 janv. 28 14:23 /var/run/docker.sock

因此使用此默认设置,需要在所有 docker CLI 命令之前添加 sudo

为避免这种情况,您可以:

  1. 将某人的用户帐户 ($USER) 添加到 docker 组 - 但在个人工作站上执行此操作风险很大,因为这相当于 提供所有程序运行由具有 root 权限的用户提供,无需任何 sudo 密码提示或审核

    另见:

  2. 否则可以自动添加 sudo 而无需手动输入 sudo docker:为此,解决方案包括在 ~/.bashrc 中添加以下别名(参见例如 {{3 }} 详情):

    __docker() {
        if [[ "${BASH_SOURCE[*]}" =~ "bash-completion" ]]; then
            docker "$@"
        else
            sudo docker "$@"
        fi
    }
    alias docker=__docker
    

    然后可以通过打开一个新终端并输入:

    $ docker run --rm -it debian:10  # asks your password
    $ \docker run --help  # does not ask your password thanks to '\'
    

答案 7 :(得分:0)

由于我的用户是AD用户,我必须通过手动编辑/ etc / group文件将AD用户添加到本地组。不幸的是,adduser命令似乎不是nsswitch意识到的,并且在将某人添加到组时无法识别未在本地定义的用户。

然后重启或刷新/ etc / group。现在,你可以使用没有sudo的docker。

问候。

答案 8 :(得分:0)

您需要以非root用户身份管理docker。 要创建docker组并添加用户,请执行以下操作:

  1. 创建docker组。

    $ sudo groupadd docker

  2. 将您的用户添加到docker组。

    $ sudo usermod -aG docker $USER

  3. 注销并重新登录,以便重新评估您的组成员身份。

如果在虚拟机上进行测试,可能需要重新启动虚拟机以使更改生效。

在台式机Linux环境(例如X Windows)上,完全退出会话,然后重新登录。

在Linux上,您还可以运行以下命令来激活对组的更改:

$ newgrp docker

  1. 验证您可以在不使用sudo的情况下运行docker命令。

    $ docker run hello-world

答案 9 :(得分:0)

你必须使用 pns 执行器而不是 docker。 运行以下修改 configmap 的补丁,一切就绪。

kubectl -n argo patch cm workflow-controller-configmap -p '{"data": {"containerRuntimeExecutor": "pns"}}' ;

参考:https://www.youtube.com/watch?v=XySJb-WmL3Q&list=PLGHfqDpnXFXLHfeapfvtt9URtUF1geuBo&index=2&t=3996s

相关问题