2014-10-07 143 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