我在装有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 chmod 666 /var/run/docker.sock

其他回答

在unix:///var/run/ Docker上尝试连接Docker守护进程套接字时被拒绝权限。sock: http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json:拨号unix /var/run/docker。Sock: connect:拒绝权限

sudo chmod 666 /var/run/docker.sock

这解决了我的问题。

为了解决这个问题,我搜索了我的docker和docker-compose安装在哪里。在我的例子中,docker安装在/usr/bin/docker, docker-compose安装在/usr/local/bin/docker-compose路径下。然后,我在我的终端中这样写:

码头工人:

sudo chmod +x /usr/bin/docker

docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

现在我不需要在我的命令docker中写入单词sudo

/***********************************************************************/

勘误:

这个问题的最佳解决方案由@mkasberg评论。我引用评论:

这可能会起作用,你可能会遇到问题。此外,这也是一个安全漏洞。你最好把自己加入docker组,就像文档中说的那样。sudo groupadd docker, sudo usermod -aG docker $USER。 文档:https://docs.docker.com/install/linux/linux-postinstall/

重启机器对我很有效。

$ reboot

如果你想以非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

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

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

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