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

我该如何解决这个问题?


当前回答

在Centos上安装Docker后。在运行下面的命令时,我得到下面的错误。

[centos@aiops-dev-cassandra3 ~]$ 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.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

修改docker.socket的Group和Permission

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

使用以下docker命令进行验证

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

其他回答

为了解决这个问题,我搜索了我的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/

修复Docker问题:(权限被拒绝)

如果docker组不存在,请创建docker组:sudo groupadd docker 查看可用系统中的超级用户数量:grep -Po '^sudo.+:\K。* $的所属 在linux命令shell中导出用户:Export user = demuser 将用户添加到docker组:sudo usermod -aG docker $ user 执行以下命令/登录或注销 检查docker运行是否正常:docker run hello-world 如果仍然得到错误,重新启动:Reboot

如果不成功,执行以下命令:

Sudo chmod 660 /var/run/docker.sock

如果你想以非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组权限之前正在运行,代理进程使用缓存的旧权限并且正在失败。重新启动进程将丢弃缓存,使事情得以解决。

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

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

Systemctl status docker.service

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

Sudo systemctl start docker.service

... 并再次检查状态:

Systemctl status docker.service

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