Weave + Ansible Docker模块

我正在使用编织来启动一些形成数据库集群的容器。 我已经通过执行以下操作在EC2中的两台主机上手动完成这项工作:

$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 

我可以检查日志和everthing启动好。

当使用ansible时,我可以使用command: ...模块和一个环境variables:

 - 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_url模块进行安装时,即使将docker_url参数设置为与DOCKER_HOST相同的东西,DNS也不能在主机之间parsing。 以下是这个样子:

  - 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 

要么

  - 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不能parsing,所以服务器永远不会启动。 我有其他的服务器选项(如neo4j的SERVER_ID等设置只是没有显示在这里为简单起见)。

任何人遇到这个? 我知道docker模块的理想用途docker-py和东西。 我想知道是否有某种不兼容的编织?

编辑

我应该提到,当容器启动时,它们实际上显示在WeaveDNS中, 似乎已经被添加到系统中。 我可以ping每个容器的本地主机名,只要它在主机上。 当我去另一台主机时,它不能ping另一台主机上的那台主机。 尽pipe他们在WeaveDNS中注册( weave status dns ),并且weave status显示了正确的对等点和已build立的连接。

这可能是由于客户端在Docker start请求中发送了一个HostConfig结构造成的,这实际上并不是你应该这么做的,而是由Docker支持的“ 为了向后兼容 ”。

编织已被固定应付 ,但修复尚未发布的版本呢。 如果你勇敢的话,你可以试试最新的快照版本 。

你可以通过明确地设置DNSparsing器到你的容器的configuration中的docker bridge IP来克服它 – 编织有一个未logging的帮助weave docker-bridge-ip来find这个地址,它通常不会改变。