我使用編織來啓動一些形成數據庫集羣的容器。我已經得到了這個工作手動上兩臺主機在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
中註冊,顯示了正確的對等點和已建立的連接。
與此同時,我採取的解決方法是使用'command'模塊。我打算把它開放,因爲它仍然是AFAICT的一個問題。 – alph486
首先,我想知道Ansible Docker模塊是使用Python客戶端還是調用docker?其次,請通過檢查'docker logs weaveproxy'確認請求是否通過代理? – errordeveloper
@errordeveloper是它使用docker-py,我不記得日誌。我將恢復更改以測試本週末嘗試建議的內容並將回傳。 – alph486