首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Docker容器中运行Docker :无法连接到Docker守护进程

问在Docker容器中运行Docker :无法连接到Docker守护进程
EN

Stack Overflow用户
提问于 2019-01-06 14:09:47
回答 2查看 10.3K关注 0票数 7

我创建了一个Dockerfile来在Docker内部运行Docker:

代码语言:javascript
复制
    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之后,我得到了:“无法连接到unix://var/ run /docker.sock上的Docker守护进程。码头守护进程正在运行吗?”

我在容器中执行了命令dockerd,结果是:

启动守护进程:错误初始化网络控制器:错误获取控制器实例:未能创建nat链码头: iptables失败: iptables -t NAT -N DOCKER: iptables v1.6.0:无法初始化iptables表‘nat’:权限被拒绝(您必须是root用户),可能iptables或内核需要升级。(出境状态3)

请指教

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-06 15:37:03

如果确实希望在其他Docker容器中运行Docker容器,则应该使用Docker (/docker)提供的现有映像,而不是创建自己的基本映像:选择标记为dind (docker中的docker)或<docker_version>-dind (如18.09.0-dind)的图像。如果您想运行自己的映像(但不推荐),不要忘记使用--privileged选项运行它(这就是为什么您会得到错误)。

docker官方图像示例:

代码语言:javascript
复制
# 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的评论和他提到的参考博客文章(不要为CI使用码头工人。):码头工人应该尽可能避免。

票数 5
EN

Stack Overflow用户

发布于 2019-05-31 13:15:55

为此,我收到的建议是在docker中使用-v参数来映射容器之间的对接套接字,如下所示:

代码语言:javascript
复制
-v /var/run/docker.sock:/var/run/docker.sock
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54062327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档