2014-10-07 172 views
25

我正在使用码头容器来构建我的软件并将其部署到ec2的集合。在部署脚本中,我构建我的软件,然后将其打包在泊坞窗图像中。该图像被推送到我的私人注册表,由我的生产ec2's拉动,然后运行。所以基本上我需要在docker容器中运行docker。在码头集装箱内运行码头?

问题是我实际上无法在我的容器上启动泊坞窗。如果我尝试

service docker start 

我得到

bash: service: command not found 

如果我尝试

docker -d 

我得到

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 

服务命令不泊坞窗容器上存在所以我无法启动泊坞窗。我不确定我现在应该做些什么来启动泊坞窗,所以我有点卡在这里,任何帮助表示赞赏。

阿位的更多信息

主机机器运行的fedora 20(最终将上一个EC2运行亚马逊的Linux)

泊坞容器正在运行的centos 7.0

Host运行泊坞版本1.2。 0,打造fa7b24f/1.2.0

集装箱运行搬运工,0.11.1-22.el7.centos.x86_64

+0

是否有在容器中运行的CentOS /泊坞窗0.11的理由?如果它专门用于运行Docker,则可以使用CoreOS或类似的东西。 – naneau 2014-10-07 15:38:07

+0

Centos容器并非完全专用于运行docker,几乎所有任务都与构建和测试软件有关。我们所做的每件事都可以在centos上成功运行,所以我们希望能够继续在容器中使用centos。 – 2014-10-07 18:52:10

+1

我认为“Docker的方式”仍然是启动一个单独的容器。容器非常适合运行单个应用程序。它们并不意味着更好地完成虚拟机完成的任务。如果你有一个复杂的堆栈,有很多任务,这可能有助于将这些任务中的一部分分散到不同的容器中。这样的任务的一个例子是运行其他Docker容器。 – naneau 2014-10-07 20:39:20

回答

37

如何不在Docker中运行'docker'并在主机上运行docker,但是从Docker容器中运行docker?只需安装你docker.sock和泊坞窗二进制:

docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker [your image]

https://github.com/sameersbn/docker-gitlab使用这种方法来旋转起来泊坞窗容器,看看这个图片。

您还可以看看:https://registry.hub.docker.com/u/mattgruter/doubledocker/

UPDATE在2016年7月

的最新方法是使用docker:dind图像,如下所述: https://hub.docker.com/_/docker/

简短的摘要:

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

然后: $ docker run --rm --link some-docker:docker docker info

+1

-v $(docker):当我在ubuntu主机上运行基于ubuntu的映像时,/ bin/docker技巧工作,但在gentoo主机上无法运行 - 所以我更喜欢在容器中安装docker,并且只映射套接字文件 – ISanych 2014-10-21 17:21:12

+1

当您的主机上发生_everything_而不是在容器中时,将docker socket安装在容器内的要点是什么? – SummerBreeze 2014-11-07 18:08:01

+0

好吧,主要是因为它不是主机上发生的一切。以docker-gitlab图像为例。 – cthulhu 2014-11-08 09:54:29

3

尽管在几乎所有情况下,我建议以下@邪神的答案,运行“在泊坞窗泊坞窗”,在情况下,当你必须(如一个该测试针对多个泊坞窗版本的测试套件),使用以下方法来创建附加的回环设备:

#!/bin/bash 

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

(从线程两者的码头工人Issue #7058

2

您可以通过简单地运行泊坞窗容器内的码头工人dind。尝试从杰罗姆这一形象,具体如下:

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

检查此页面了解详情:
https://github.com/jpetazzo/dind