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

我该如何解决这个问题?


当前回答

将当前用户添加到docker组

sudo usermod -aG docker $USER

修改docker套接字的权限,使其能够连接 到docker守护进程/var/run/docker.sock

sudo chmod 666 /var/run/docker.sock

其他回答

最直接的解决办法是打字

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

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

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

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

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

首先,使用以下命令检查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,使其能够获得正确的权限。

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

添加docker组

$ sudo groupadd docker

将当前用户添加到docker组

$ sudo usermod -aG docker $USER

切换会话到docker组

$ newgrp - docker

运行一个示例进行测试

$ docker run hello-world

使用这个命令

sudo usermod -aG docker $USER

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