问题描述
我已经按照here的说明安装了docker。我使用Ubuntu Trusty 14.04 (LTS) (64-bit)。安装过程中的一切都很好。另外,命令$ sudo docker run -i -t ubuntu /bin/bash
可以很好地完成(在打开的控制台中键入”exit”之后。但是当我尝试执行其他操作时,我得到的是”permission denied”。例如:
`$ sudo docker run -d -P training/webapp python app.py`
在Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied
中重新使用
` docker info`
在Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied
中重新使用
如何解决呢?我在问题上用谷歌搜索,但找不到适合我的案例的解决方案。
最佳回答
添加docker组(如果尚不存在)。
$ sudo groupadd docker
将连接的用户${USER}
添加到docker组。更改用户名以匹配您的首选用户。
$ sudo gpasswd -a ${USER} docker
重新启动Docker守护程序:
$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd
您应该注销并再次登录以更新组权限。为避免这种情况,您可以按如下所示切换到子 shell 。或使用this question中提到的任何其他技巧:
su - $USER
次佳回答
如果您正在运行CentOS或RedHat,则可能必须先通过运行以下命令禁用SELinux:
setenforce 0
随后,Eiter重新启动以重新启用SELinux或运行setenforce 1
。
第三种回答
由于selinux,我遇到了同样的问题。您可以通过以下方法检查selinux是否是罪魁祸首:
-
禁用selinux:
setenforce 0
-
重试
如果禁用selinux解决了您的问题,则没有理由将其禁用:
-
启用selinux:
setenforce 1
-
在selinux配置中允许套接字连接:
setsebool docker_connect_any true
-
使用
--priviledged
选项运行Docker容器
第四种回答
我认为,您的用户名已经在docker组中。要检查这一点,请发出以下命令。
id -nG
如果不是,则需要通过以下命令将用户添加到docker组中。
sudo groupadd docker
sudo usermod -aG docker $USER
当执行命令sudo systemctl start docker
时,它将创建一个docker进程。该docker进程包含dockerd
守护程序线程。该命令还会创建默认的docker.sock
Unix套接字。 dockerd
守护程序线程会连续侦听docker.sock
套接字。这使您可以通过docker.pid
流程来完成kernel-level IPC。为了能够使用此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