繁体   English   中英

Docker容器内的码头工人

[英]docker inside docker container

我想在一个正在运行的docker容器中安装docker。

docker run -it centos:centos7

我的基础容器正在使用centos,我可以使用docker exec登录到正在运行的容器。 但是当我尝试使用yum install -y docker其中安装yum install -y docker它会安装。

但不知怎的,我无法用docker -d &启动docker服务,它给了我错误:

INFO[0000] Option DefaultNetwork: bridge 
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: , error: exit status 1 
FATA[0000] Error starting daemon: Error initializing network controller: Error initializing bridge driver: Setup IP forwarding failed: open /proc/sys/net/ipv4/ip_forward: read-only file system

有没有办法我可以在docker容器中安装docker或者构建已经运行docker的映像? 我已经看过这些例子,但没有一个对我有用。

主机上uname -r的输出:

[fedora@ ~]$ uname -r
4.2.6-200.fc22.x86_64

任何帮助,将不胜感激。

提前致谢

更新

感谢https://stackoverflow.com/a/38016704/372019我想展示另一种方法。

您应该复制或安装docker二进制文件的特定于容器的版本,而不是安装主机的docker二进制文件。 由于您仅在客户端模式下使用它,因此您无需将其作为系统服务进行安装。 您仍然需要将Docker套接字安装到容器中,以便您可以轻松地与主机的Docker引擎进行通信。

假设你有一个带有工作Docker二进制文件的基本图像(例如官方的docker图像 ),现在的例子如下:

docker run\\ -v /var/run/docker.sock:/var/run/docker.sock\\ docker:1.12 docker info


在没有实际回答您的问题的情况下,我建议您阅读使用Docker-in-Docker进行CI或测试环境? 三思而后行

它解释了为什么运行docker-in-docker应该替换为Docker容器作为“外部”或“基础”容器的兄弟节点运行的设置。 这篇文章还链接到原始的https://github.com/jpetazzo/dind项目,在那里你可以找到如何在Docker中运行Docker的工作示例 - 以防你仍然希望拥有docker-in-docker。

如何启用容器来访问主机的Docker守护程序的示例如下所示:

docker run\
  -v /var/run/docker.sock:/var/run/docker.sock\
  -v /usr/bin/docker:/usr/bin/docker\
  busybox:latest /usr/bin/docker info

如果您使用Docker工具箱在Mac上。

以下命令不起作用

docker run\
  -v /var/run/docker.sock:/var/run/docker.sock\
  -v /usr/bin/docker:/usr/bin/docker\
  busybox:latest /usr/bin/docker info

因为/var/run/docker.sock不在你的OSX文件系统上

Docker守护程序在boot2docker VM中运行 - 这就是unix套接字所在的位置。

所以你必须从boot2docker VM运行容器

$ docker-machine ssh default
$ docker run\ 
         -v /var/run/docker.sock:/var/run/docker.sock\ 
         -v $(which docker):/usr/bin/docker\ 
         busybox:latest /usr/bin/docker info
$ exit

这看起来像Docker-in-Docker,感觉就像Docker-in-Docker,但它不是Docker-in-Docker,当这个容器会创建更多容器时,这些容器将在顶级Docker中创建。

你需要--privileged参数。

默认情况下,Docker容器是“非特权”的,例如,不能在Docker容器中运行Docker守护程序。

资源

使用命令docker run --privileged -it centos:centos7 bash运行基本映像。 然后,您可以在该容器内安装并运行另一个docker容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM