我在装有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

我该如何解决这个问题?


当前回答

使用这个命令

sudo usermod -aG docker $USER

然后重新启动你的电脑这对我有用。

其他回答

这肯定不是问题所在,但由于它是谷歌错误消息时的第一个搜索结果,所以我就把它留在这里。

首先,使用以下命令检查docker服务是否正在运行:

Systemctl status docker.service

如果它没有运行,试着启动它:

Sudo systemctl start docker.service

... 并再次检查状态:

Systemctl status docker.service

如果还没有启动,请调查原因。可能,您修改了配置文件并犯了一个错误(就像我在修改/etc/docker/daemon.json时所做的那样)。

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

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

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

作为linux用户的最短答案->

简单地尝试任何命令作为超级用户与“sudo”

- sudo docker-compose up

如果你想以非root用户运行docker,那么你需要将它添加到docker组中。

如果docker组不存在,请创建docker组

$ sudo groupadd docker

将您的用户添加到docker组。

$ sudo usermod -aG docker $USER

登录到新的docker组(以避免再次注销/登录;但如果还不够,请尝试重新启动):

$ newgrp docker

检查docker是否可以在没有root的情况下运行

$ docker run hello-world

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

$ reboot

警告

docker组授予等同于root用户的权限。有关这如何影响系统安全性的详细信息,请参阅Docker Daemon攻击面。

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

最直接的解决办法是打字

Sudo chmod 666 /var/run/docker.sock 每次你启动你的机器。然而,这种方法会破坏现有的任何系统安全性,并向所有人开放Docker套接字。如果这对你来说是可以接受的——例如:你的机器的唯一用户——那么就使用它。

尽管如此,每次启动机器时都需要它,您可以通过添加使它在引导时运行

start on startup
task
exec chmod 666 /var/run/docker.sock

打开/etc/init/docker-chmod.conf文件。