![](/img/trans.png)
[英]Docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
[英]Why do I still getting error, Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock?
我已經在我的 EC2 實例中安裝了 docker,並將 Jenkins 作為 docker 容器運行。 完整的代碼如下。
sudo su
apt-get update
apt install -y docker.io
service docker start
usermod -a -G docker ubuntu
chmod 666 /var/run/docker.sock
mkdir /data
mkdir /data/jenkins
chmod o+rwx /data
chmod o+rwx /data/jenkins
然后運行容器,
docker run --name jenkins-dev -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:jdk11
然后我通過docker exec -it 17cfbb0f966d
進入容器內部,並在其中安裝 docker,如此處所述。 然后,docker 命令工作正常。 但重新登錄后,我無法運行 docker 命令。 它給出了以下錯誤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.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
。 我想,每次登錄后 docker.sock 文件的權限都會發生變化。 所以我不得不在主終端重新運行chmod 666 /var/run/docker.sock
以在容器內運行 docker 命令。 但我也嘗試了另一種將用戶 jenkins 添加到 docker 組的方法。 它已成功添加到組“docker”,如下所示。
ubuntu@ip-10-133-184-31:~$ docker exec -it 17cfbb0f966d bash
jenkins@17cfbb0f966d:/$ grep /etc/group -e "docker"
docker:x:999:jenkins
之后,我重新啟動了實例並再次啟動了容器。 但我仍然無法在容器內運行任何 docker 命令。 它拋出相同的錯誤。
ubuntu@ip-10-133-184-31:~$ docker exec -it 17cfbb0f966d bash
jenkins@17cfbb0f966d:/$ docker ps
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.24/containers/json": dial unix
/var/run/docker.sock: connect: permission denied
可能是什么問題?
它在以 root 用戶身份運行容器后工作,即: docker run -u root ...
幾天前我遇到了同樣的問題,並通過添加另一個組來解決它,如下所示:
RUN useradd -u $UID -ms /bin/bash $USER && \
usermod -aG docker $USER && \
groupadd -g $DGID dockerr && \
usermod -aG dockerr $USER
這里的$DGID
是宿主機組docker
的gid
。
在 docker 鏡像中安裝 docker 客戶端后,會創建一個docker
組,但是這個 docker 組的gid
可能與主機上的不同,而gid
不是組名是關鍵。
因此,我在主機上使用 docker 組的gid
創建了一個新組,並將我的新用戶放入該組。 有了這個gid
,這個用戶就可以訪問/var/run/docker.sock
。
PS。
我試圖讓 docker 內的docker
組與主機共享相同的gid
,但無法成功。
這確實解決了我的問題,但是我想知道是否有更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.