繁体   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