簡體   English   中英

為什么我仍然收到錯誤,在嘗試連接到 unix:///var/run/docker.sock 的 Docker 守護程序套接字時獲得權限被拒絕?

[英]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是宿主機組dockergid

在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM