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

sudo docker run hello-world

一切都很好,但是我想隐藏sudo命令以使该命令更短。 如果我写的命令没有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

我该如何解决这个问题?


当前回答

你可以按照以下步骤来做,这会对你有用:

create a docker group sudo groupadd docker add your user to this group sudo usermod -aG docker $USER list the groups to make sure that docker group created successfully by running this command groups run the following command also to change the session for docker group newgrp docker change the group ownership for file docker.socksudo chown root:docker /var/run/docker.sock change the ownership for .docker directory sudo chown "$USER":"$USER" /home/"$USER"/.docker -R finally sudo chmod g+rwx "$HOME/.docker" -R

在这个测试之后,你可以运行docker ps -a

其他回答

我尝试了这个推荐与sudo推荐,它是可以的。Sudo docker pull hello-world或Sudo docker run hello-world

如果创建一个docker组并将你的用户添加到其中不起作用(最好的解决方案,在前面的回答中描述过),那么这个是第二好的选择:

sudo chown $USER /var/run/docker.sock 

它所做的是改变docker的所有权。Sock文件到您的用户。

注意:使用chmod 666是一个非常糟糕的做法,因为它给了几乎所有人访问和修改docker的权限。袜子文件。

这对我来说很有用:

进入容器内部并修改文件的ACL

sudo usermod -aG docker $USER
sudo setfacl --modify user:$USER:rw /var/run/docker.sock

这是一个比使用chmod更好的解决方案。

我也遇到了类似的问题,但是我想创建的容器需要挂载/var/run/docker。sock作为一个卷(Portainer Agent),同时在不同的名称空间下运行它。通常容器并不关心它是从哪个名称空间开始的——这就是问题所在——但由于访问是从不同的名称空间进行的,因此必须避免这一点。

在容器的run命令中添加——userns=host,使其能够获得正确的权限。

这是一个非常具体的用例,但在经过了比我想要承认的更多的研究时间后,我只是想,如果其他人最终陷入这种情况,我应该与世界分享它:)

我们总是忘记acl。看到setfacl。


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