2015-10-07 130 views
2

我使用編織來啓動一些形成數據庫集羣的容器。我已經得到了這個工作手動上兩臺主機在EC2通過執行以下操作:Weave + Ansible Docker模塊

$HOST1> weave launch 
$HOST2> weave launch $HOST1 
$HOST1> eval $(weave env) 
$HOST2> eval $(weave env) 
$HOST1> docker run --name neo-1 -d -P ... my/neo4j-cluster 
$HOST2> docker run --name neo-2 -d -P ... my/neo4j-cluster 
$HOST3> docker run --name neo-1 -d -P -e ARBITER=true ... my/neo4j-cluster 

我可以檢查日誌和寄託都啓動正常。

當使用ansible我可以得到上面使用command: ...模塊和環境變量的工作:

- name: Start Neo Arbiter 
command: 'docker run --name neo-2 -d -P ... my/neo4j-cluster' 
environment: 
    DOCKER_HOST: 'unix:///var/run/weave/weave.sock' 

由於這基本上所有eval $(weave env)一樣。

當我使用docker模塊ansible,甚至與docker_url參數設置爲您在上面看到DOCKER_HOST同樣的事情,DNS沒有主機之間解決。這裏是什麼樣子:

- name: Start Neo Arbiter 
    docker: 
     image: "my/neo4j-cluster:{{neo4j_version}}" 
     docker_url: unix:///var/run/weave/weave.sock 
     name: neo-3 
     pull: missing 
     state: reloaded 
     detach: True 
     publish_all_ports: True 

OR

- name: Start Neo Arbiter 
    docker: 
     image: "my/neo4j-cluster:{{neo4j_version}}" 
     docker_url: unix:///var/run/weave/weave.sock 
     name: neo-3 
     pull: missing 
     state: reloaded 
     detach: True 
     publish_all_ports: True 
    environment: 
     DOCKER_HOST: 'unix:///var/run/weave/weave.sock' 

無論這些工作。 DNS無法解析,因此服務器永遠不會啓動。我確實有其他的服務器選項(比如neo4j的SERVER_ID等,爲了簡單起見這裏沒有顯示)。

有人碰到過這個嗎?我知道碼頭模塊用於安全使用docker-py和東西。我想知道是否有某種類型的編織不兼容?

編輯

我應該提到的是,當容器推出他們實際上在WeaveDNS顯示出來,並出現已被添加到系統中。只要它在主機上,我就可以ping每個容器的本地主機名。當我轉到另一臺主機時,它不能ping另一臺主機上的那臺主機。儘管他們在WeaveDNS(weave status dns)和weave status中註冊,顯示了正確的對等點和已建立的連接。

+0

與此同時,我採取的解決方法是使用'command'模塊。我打算把它開放,因爲它仍然是AFAICT的一個問題。 – alph486

+0

首先,我想知道Ansible Docker模塊是使用Python客戶端還是調用docker?其次,請通過檢查'docker logs weaveproxy'確認請求是否通過代理? – errordeveloper

+0

@errordeveloper是它使用docker-py,我不記得日誌。我將恢復更改以測試本週末嘗試建議的內容並將回傳。 – alph486

回答

0

這可能是由客戶端在泊塢start請求,這是不是真的你應該怎麼做,而是由碼頭工人「for backwards compatibility」支持發送HostConfig結構引起的。

織法已經fixed to cope,但該修復程序尚未發佈版本。如果你很勇敢,你可以試試latest snapshot version

您可以通過明確地將DNS解析器設置爲容器配置中的碼頭橋IP來克服它 - 編織有一個未公開的幫助程序weave docker-bridge-ip來查找此地址,並且它通常不會更改。