2015-09-01 70 views

回答

25

是的,即使沒有Docker Machine,也可以在單個主機上運行兩個Docker守護程序。由於碼頭工人1.9.1,下面docker daemon標誌,可能導致衝突,如果兩個守護進程使用默認的那些:

-b, --bridge=      Attach containers to a network bridge 
    --exec-root=/var/run/docker   Root of the Docker execdriver 
    -g, --graph=/var/lib/docker   Root of the Docker runtime 
    -H, --host=[]      Daemon socket(s) to connect to 
    -p, --pidfile=/var/run/docker.pid Path to use for daemon PID file 
  • --bridge默認爲docker0,如果你不使用默認情況下,您必須手動創建和配置網橋(Docker不會爲您創建/管理它)。以下更多細節。

  • --exec-root=/var/run/docker是存儲容器狀態的地方。

  • --graph=/var/lib/docker是存儲圖像的地方。

  • --host=[]指定Docker守護進程將偵聽客戶端連接的位置。如果未指定,則默認爲/var/run/docker.sock

  • --pidfile=/var/run/docker.pid是存儲守護進程的進程ID的地方。

所以,只要你的兩個守護進程爲這些標誌使用不同的值,你可以在同一個主機上運行它們。示例腳本(包括網絡設置):

#!/bin/sh 
## name: altdocker.sh 
set -e -x 

: ${bridge=altdocker} 
: ${base=$HOME/$bridge} 

# Set up bridge network: 
if ! ip link show $bridge > /dev/null 2>&1 
then 
    sudo brctl addbr $bridge 
    sudo ip addr add ${net:-"10.20.30.1/24"} dev $bridge 
    sudo ip link set dev $bridge up 
fi 

sudo docker daemon \ 
    --bridge=$bridge \ 
    --exec-root=$base.exec \ 
    --graph=$base.graph \ 
    --host=unix://$base.socket \ 
    --pidfile=$base.pid 

用法示例:

## in one terminal 
$ env net=10.9.8.7/24 /bin/sh altdocker.sh 
# ... log output ... 

## in another terminal 
$ docker -H unix://$HOME/altdocker.socket run --rm -it alpine sh 
/# echo hereiam 
hereiam 
+2

這工作真的很棒。但是,測試設置的命令無法按照您的設置進行操作。 'docker -H unix:// $ HOME/altdocker --rm -it alpine sh'應該是'docker -H unix://$HOME/altdocker.socket run --rm -it alpine sh'。 –

+0

謝謝@dynamic_cast。從一個更大的腳本中提取。更正了這個例子。 – benizi

6

偉大的問題!可以在容器中啓動Docker守護進程。在那個容器中,你將能夠啓動更多的容器。這樣你可以在同一臺主機上運行不同設置的docker守護進程。

結帳該項目:https://github.com/jpetazzo/dind。它提供了一個包含Docker本身的Docker鏡像,就像你需要的一樣。

-1

是的,這是通過使用Docker Machine

使用這個,你可以創建多個碼頭工人守護進程並根據需要在它們之間切換是可行的。

+1

正是你將如何去這樣做?你必須爲你想要的每個碼頭引擎創建一個虛擬機,對吧? – babbata

相關問題