首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >docker中的docker容器

docker中的docker容器
EN

Stack Overflow用户
提问于 2015-12-14 18:10:47
回答 4查看 3K关注 0票数 12

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

代码语言:javascript
运行
复制
docker run -it centos:centos7

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

但不知何故,我不能用docker -d &启动docker服务,它给我的错误是:

代码语言:javascript
运行
复制
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的输出:

代码语言:javascript
运行
复制
[fedora@ ~]$ uname -r
4.2.6-200.fc22.x86_64

任何帮助都将不胜感激。

提前感谢

EN

回答 4

Stack Overflow用户

发布于 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守护进程的示例:

代码语言:javascript
运行
复制
docker run\
  -v /var/run/docker.sock:/var/run/docker.sock\
  -v /usr/bin/docker:/usr/bin/docker\
  busybox:latest /usr/bin/docker info
票数 11
EN

Stack Overflow用户

发布于 2016-06-24 23:14:30

如果您使用的是带有Docker工具箱的Mac。

下面的命令不会在中工作

代码语言:javascript
运行
复制
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运行容器

代码语言:javascript
运行
复制
$ 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中创建。

票数 2
EN

Stack Overflow用户

发布于 2015-12-14 20:14:48

您需要--privileged参数。

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

Source

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34264348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档