Centos 在docker容器中运行docker?

Centos 在docker容器中运行docker?,centos,docker,fedora,Centos,Docker,Fedora,我正在使用docker容器构建软件并将其部署到ec2的集合中。在部署脚本中,我构建软件,然后将其打包到docker映像中。映像被推送到我的私有注册表,由我的生产ec2拉入,然后运行。所以本质上我需要在docker容器中运行docker 问题是我不能在我的容器上启动docker。如果我尝试 service docker start 我明白了 bash: service: command not found 2014/10/07 15:54:35 docker daemon: 0.11.1-de

我正在使用docker容器构建软件并将其部署到ec2的集合中。在部署脚本中,我构建软件,然后将其打包到docker映像中。映像被推送到我的私有注册表,由我的生产ec2拉入,然后运行。所以本质上我需要在docker容器中运行docker

问题是我不能在我的容器上启动docker。如果我尝试

service docker start
我明白了

bash: service: command not found
2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver:
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock)
[e2feb6f9] +job initserver()
[e2feb6f9.initserver()] Creating server
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock)
[error] attach_loopback.go:42 There are no more loopback device available.
loopback mounting failed
[e2feb6f9] -job initserver() = ERR (1)
2014/10/07 15:54:35 loopback mounting failed
如果我尝试

docker -d
我明白了

bash: service: command not found
2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver:
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock)
[e2feb6f9] +job initserver()
[e2feb6f9.initserver()] Creating server
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock)
[error] attach_loopback.go:42 There are no more loopback device available.
loopback mounting failed
[e2feb6f9] -job initserver() = ERR (1)
2014/10/07 15:54:35 loopback mounting failed
docker容器上不存在service命令,因此无法启动docker。我不确定我现在应该做什么来启动docker,所以我有点被困在这里,任何帮助都是感激的

再多了解一点

主机正在运行fedora 20(最终将在ec2上运行amazon linux)

Docker容器正在运行centos 7.0

主机正在运行Docker版本1.2.0,构建fa7b24f/1.2.0


容器正在运行docker-0.11.1-22.el7.centos.x86_64

不运行“docker-in-docker”并在主机上运行docker,而是从docker容器中运行怎么样?只需安装docker.sock和docker二进制文件:

docker-run-v/var/run/docker.sock:/run/docker.sock-v$(哪个docker):/bin/docker[你的图像]

使用此方法旋转docker容器,请看此图像

您还可以查看:

2016年7月更新

最新的方法是使用
docker:dind
image,如下所述:

小结:


$docker run--privileged--name some docker-d docker:dind

然后:

$docker run--rm--链接一些docker:docker docker信息

在几乎所有情况下,我建议遵循@cthulhu的答案,不要运行“docker in docker”,但在您必须运行的情况下(例如,针对多个docker版本进行测试的测试套件),请使用以下方法创建额外的环回设备:

#!/bin/bash

for i in {0..6}
do
    mknod -m0660 /dev/loop$i b 7 $i
done

(摘自Docker线程)

您只需使用
dind
在Docker容器内运行Docker即可。请尝试Jerome的以下图片:

docker-run-privileged-t-i jpetazzo/dind

查看此页面了解更多详细信息:

是否有理由在容器中运行centos/docker 0.11?如果专用于运行Docker,您可以使用CoreOS或类似的工具。centos容器并非完全专用于运行Docker,它的几乎所有任务都与构建和测试软件有关。众所周知,我们所做的一切都能在centos上成功运行,因此我们希望能够在一个容器中继续使用centos。我认为“Docker方式”仍然是旋转一个单独的容器。容器非常适合运行单个应用程序。它们并不意味着取代虚拟机更好地完成的任务。如果您有一个包含许多任务的复杂堆栈,那么将其中一些任务分散到单独的容器中可能会有所帮助。这样一个任务的例子就是运行其他Docker容器。面对同样的问题,同样的事情,我也是CentOS爱好者。您是否找到了解决方案或更好的方法?Coreos591也遇到了同样的问题。有人找到解决方案了吗?-v$(哪个docker):/bin/docker技巧在我运行ubuntu主机上基于ubuntu的图像时对我有效,但是在gentoo主机上不起作用-所以我更喜欢在容器中安装docker,并且只映射套接字文件当所有事情都发生在主机上而不是容器中时,在容器中安装docker套接字有什么意义。嗯,主要是因为它不是“所有事情”都发生在主机上。以docker gitlab映像为例。使用绑定sock和executable的方法在OSX上给了我以下错误:
docker:daemon的错误响应:mkdir/usr/local/bin/docker:file exists。
dind作者建议绑定挂载docker套接字的方法(但不是docker二进制文件)由于docker在docker进近中的复杂性。看见