我使用编织来启动一些形成数据库集群的容器。我已经得到了这个工作手动上两台主机在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