我通过软件商店安装了 Docker,它显示它是一个 Snap 包。我想这对我来说没问题,但不幸的是,我尝试过的每个 Docker 命令都不起作用:
$ docker info
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/info: dial unix /var/run/docker.sock: connect: permission denied
知道如何修复这个问题吗?
编辑:我现在通过安装 Docker 来解决这个问题Docker 自己的存储库,这可能对将来浏览此问题的人也有效。不过,对于那些希望能够从 Snap 运行它的人来说,我还是保留这个问题。
答案1
这是来自 GitHub 页面的,您是否尝试过这些确切的步骤:
If you are using Ubuntu Core 16,
Connect the docker:home plug as it's not auto-connected by default:
$ sudo snap connect docker:home
If you are using an alternative snap-compatible Linux distribution ("classic" in snap lingo), and would like to run docker as a normal user:
Create and join the docker group.
$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker
You will also need to disable and re-enable the docker snap if you added the group while it was running.
$ sudo snap disable docker
$ sudo snap enable docker
答案2
错误消息告诉您当前用户无法访问 docker 引擎,因为您缺少访问 unix 套接字以与引擎通信的权限。
临时解决方案
每次都使用该sudo
命令以提升的权限执行命令。
永久(建议)解决方案
将当前用户添加到docker
组中。可以通过输入
sudo usermod -a -G docker $USER
您必须注销并重新登录才能使群组成员身份生效。
答案3
我假设您的用户名已经在 docker 组中。要检查这一点,请发出以下命令。
id -nG
如果没有,您需要通过以下命令将您的用户添加到 docker 组中。
sudo groupadd docker
sudo usermod -aG docker $USER
当您执行命令时sudo systemctl start docker
,它会创建一个docker进程。该docker进程包含dockerd
守护进程线程。该命令还会创建默认的docker.sock
Unix套接字。守护进程docker.sock
线程会持续监听套接字dockerd
。这使得您可以与进程进行内核级IPC docker.pid
。要使用此docker套接字,您需要从进程级别(docker.pid
)和文件级别(docker.sock
)获得适当的权限。因此,执行以下两个命令应该可以解决您的问题。
sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid
答案4
您应该将用户添加到 Docker 组(参见官方文档)。
您可以sudo
在命令前面添加,也可以docker
使用此命令将用户添加到组中:
sudo usermod -aG docker <USER>
注销并重新登录,以便重新评估您的群组成员身份。