問題描述
我已經按照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
參考資料