当我尝试运行简单的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
但它没有帮助。我仍然得到相同的错误消息。我该如何解决?
答案 0 :(得分:63)
对于shell新手,命令:
$ sudo usermod -aG docker $USER
需要在shell中定义$USER
。默认情况下通常会出现这种情况,但您可能需要在某些shell中将值设置为登录ID。
更改用户组不会更改用户已打开的现有登录名,终端和shell。要避免再次执行登录,您只需运行:
$ newgrp docker
访问当前shell中的该组。
完成此操作后,用户将有效地在服务器上拥有root访问权限,因此只对受信任且具有不受限制的sudo访问权限的用户执行此操作。
答案 1 :(得分:4)
$ echo $ USER
$ sudo usermod -aG docker $ USER
$ 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套接字以与该引擎进行通信。
快速修复:
即-sudo docker ps
即-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
。
为避免这种情况,您可以:
将某人的用户帐户 ($USER
) 添加到 docker
组 - 但在个人工作站上执行此操作风险很大,因为这相当于 提供所有程序运行由具有 root 权限的用户提供,无需任何 sudo
密码提示或审核。
另见:
否则可以自动添加 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组并添加用户,请执行以下操作:
创建docker组。
$ sudo groupadd docker
将您的用户添加到docker组。
$ sudo usermod -aG docker $USER
注销并重新登录,以便重新评估您的组成员身份。
如果在虚拟机上进行测试,可能需要重新启动虚拟机以使更改生效。
在台式机Linux环境(例如X Windows)上,完全退出会话,然后重新登录。
在Linux上,您还可以运行以下命令来激活对组的更改:
$ newgrp docker
验证您可以在不使用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