Ami*_*mir 4 docker ubuntu-16.04
我创建了一个 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
Run Code Online (Sandbox Code Playgroud)
在我启动容器并运行 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)
请指教
小智 8
我收到的建议是在 docker run 中使用 -v 参数来映射容器之间的 docker 套接字,如下所示:
-v /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
如果您确实想在其他 Docker 容器中运行 Docker 容器,则应该使用 Docker ( https://hub.docker.com/_/docker ) 提供的现有映像,而不是创建自己的基础映像:选择标记的映像as dind( docker in docker ) 或(<docker_version>-dind like 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
Run Code Online (Sandbox Code Playgroud)
尽管如此,我同意@DavidMaze 的评论和他提到的参考博客文章(Do not use Docker-in-Docker for CI):应该尽可能避免使用 Docker-in-Docker。
| 归档时间: |
|
| 查看次数: |
7038 次 |
| 最近记录: |