在Docker容器内运行Docker:无法连接到Docker守护程序
我创建了一个Docker文件以在Docker中运行Docker:在Docker容器内运行Docker:无法连接到Docker守护程序,docker,ubuntu-16.04,Docker,Ubuntu 16.04,我创建了一个Docker文件以在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.doc
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后,我得到:
“无法连接到位于的Docker守护程序unix:///var/run/docker.sock. docker守护进程正在运行吗?”
我在容器中执行了dockerd命令,结果:
启动守护程序时出错:初始化网络控制器时出错:获取控制器实例时出错:无法创建NAT链DOCKER:iptables失败:iptables-t NAT-N DOCKER:iptables v1.6.0:无法初始化iptables表“NAT”:权限被拒绝(您必须是root)
可能需要升级iptables或内核。
(退出状态3)
请建议如果您真的想在其他Docker容器中运行Docker容器,您应该使用Docker()提供的现有图像,而不是创建自己的基础图像:选择标记为
dind
(docker中的docker)或-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中的Docker。我收到的建议是在Docker run中使用-v参数在容器之间映射Docker套接字,如下所示:
-v /var/run/docker.sock:/var/run/docker.sock
您是如何启动容器的?使用特权模式?将主机的docker sock文件绑定到卷?是“不要这样做”。这是一个非常复杂的高级配置,几乎从来没有必要。首先,我使用docker构建创建了一个映像,然后我使用docker run-it myimageI运行了它。我需要以下两个参数才能工作(-v和--privileged),例如docker run-v/var/run/docker.sock:/var/run/docker.sock--privileged hello world