我创建了一个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)
请告知
答案 0 :(得分:1)
如果您真的想在另一个Docker容器中运行Docker容器,则应使用Docker(https://hub.docker.com/_/docker)提供的现有映像,而不是创建自己的基本映像:选择标记为{{1}的映像}( d ocker in d ocker)或dind
(如<docker_version>-dind
)。如果要运行自己的映像(尽管不建议这样做),请不要忘记使用18.09.0-dind
选项运行它(这就是为什么会出现错误的原因)。
带有--privileged
官方图片的示例:
docker
尽管如此,我还是同意@DavidMaze的评论以及他提到的参考博客文章(Do not use Docker-in-Docker for CI):应尽可能避免使用Docker-in-Docker。
答案 1 :(得分:0)
为此,我收到的建议是使用docker run中的-v参数在容器之间映射docker套接字,如下所示:
-v /var/run/docker.sock:/var/run/docker.sock