我想在一个运行的docker容器中安装docker。
docker run -it centos:centos7
我的基本容器使用centos,我可以使用docker exec
登录到运行容器。但是当我尝试使用yum install -y docker
在其中安装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的镜像?我已经看过these的例子了,但是没有一个适合我。
主机上uname -r
的输出:
[fedora@ ~]$ uname -r
4.2.6-200.fc22.x86_64
任何帮助都将不胜感激。
提前感谢
发布于 2015-12-22 21:30:28
更新
感谢https://stackoverflow.com/a/38016704/372019,我想展示另一种方法。
您应该复制或安装容器特定版本的docker
二进制文件,而不是挂载主机的docker
二进制文件。由于您只在客户端模式下使用它,因此不需要将其作为系统服务进行安装。您仍然需要将Docker套接字挂载到容器中,以便可以轻松地与主机的Docker引擎进行通信。
假设您获得了一个包含Docker二进制文件(例如official docker image)的基础镜像,示例现在看起来如下所示:
docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ docker:1.12 docker info
在没有真正回答你的问题的情况下,我建议你阅读Using Docker-in-Docker for your CI or testing environment? Think twice。
它解释了为什么运行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
发布于 2016-06-24 23:14:30
如果您使用的是带有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守护进程在unix虚拟机内部运行--这就是boot2docker
套接字所在的位置。
因此,您必须从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中创建。
发布于 2015-12-14 20:14:48
您需要--privileged
参数。
默认情况下,Docker容器是“无特权的”,例如,不能在Docker容器中运行Docker守护进程。
使用命令docker run --privileged -it centos:centos7 bash
运行您的基本映像。然后,您可以在该容器中安装和运行另一个docker容器。
https://stackoverflow.com/questions/34264348
复制相似问题