簡體   English   中英

在Docker容器中運行Docker:無法連接到Docker守護程序

[英]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 )而不是創建自己的基本圖像:選擇標記為圖像作為dindd 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.

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