docker容器内的docker

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

docker run -it centos:centos7 

我的基本容器使用centos,我可以使用docker execlogin到运行容器。 但是当我尝试使用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或build立图像已经有运行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


没有真正回答你的问题,我build议你阅读在你的CI或testing环境中使用Docker-in-Docker? 仔细想想 。

它解释了为什么运行中的docker-in-docker应该replace为Docker容器作为“outer”或“base”容器的同级运行的设置。 本文还链接到原始的https://github.com/jpetazzo/dind项目,您可以在这里find如何在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 

如果你在Mac上使用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 

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

Docker守护进程在boot2docker虚拟机内部运行 – 这就是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,当这个容器创build更多容器时,这些容器将在顶层Docker中创build。

你需要--privileged参数。

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

资源

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