2015-10-07 71 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来查找此地址,并且它通常不会更改。