我在装有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 chown $USER /var/run/docker.sock 

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

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

其他回答

添加docker组

$ sudo groupadd docker

将当前用户添加到docker组

$ sudo usermod -aG docker $USER

切换会话到docker组

$ newgrp - docker

运行一个示例进行测试

$ docker run hello-world

Sudo chmod 666 /var/run/docker.sock

这帮助我,当我得到错误,甚至登录到docker 但现在这在我的系统中工作得很好。

使用这个命令

sudo usermod -aG docker $USER

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

它只需要更改sock文件的权限。

sudo chmod 666 /var/run/docker.sock

这肯定有用。

在我的例子中,是进程本身(CI服务器代理)试图运行一个docker命令,但无法运行它,但当我试图从同一个用户中运行相同的命令时,它工作了。

重新启动运行CI服务器代理的守护进程解决了这个问题。

之前命令在代理内部无法工作的原因是因为代理在我安装docker并授予docker组权限之前正在运行,代理进程使用缓存的旧权限并且正在失败。重新启动进程将丢弃缓存,使事情得以解决。