[英]Running Docker inside Docker container: Cannot connect to the Docker daemon
我創建了一個Dockerfile在Docker內部運行Docker:
FROM ubuntu:16.04
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - &&\
apt-key fingerprint 0EBFCD88
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update && \
apt-get install -y docker-ce && \
systemctl enable docker
啟動容器並運行docker ps后,我得到:“無法通過unix:///var/run/docker.sock連接到Docker守護程序。Docker守護程序正在運行嗎?”
我在容器內執行了命令dockerd:
錯誤啟動守護程序:錯誤初始化網絡控制器:錯誤獲取控制器實例:無法創建NAT鏈DOCKER:iptables失敗:iptables -t nat -N DOCKER:iptables v1.6.0:無法初始化iptables表`nat':權限被拒絕(您必須是root用戶)也許iptables或您的內核需要升級。 (退出狀態3)
請指教
如果您確實想在另一個Docker容器中運行Docker容器,則應使用Docker提供的現有圖像( https://hub.docker.com/_/docker )而不是創建自己的基本圖像:選擇標記為圖像作為dind
( d ocker 中的 d ocker)或<docker_version>-dind
(如18.09.0-dind
)。 如果要運行自己的映像(盡管不建議這樣做),請不要忘記使用--privileged
選項運行它(這就是為什么會出現錯誤的原因)。
docker
官方圖片示例:
# run Docker container running Docker daemon
docker run --privileged --name some-docker -d docker:18.09.0-dind
# run hello-world Docker image inside the Docker container previously started
docker exec -i -t some-docker docker run hello-world
不過,我同意@DavidMaze的評論以及他所引用的參考博客文章( 請勿將Docker-in-Docker用於CI ):應當盡可能避免使用Docker-in-Docker 。
為此,我收到的建議是使用docker run中的-v參數在容器之間映射docker套接字,如下所示:
-v /var/run/docker.sock:/var/run/docker.sock
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.