Weave + Ansible Docker模块

时间:2015-10-07 02:21:48

标签: docker ansible weave

我使用weave来启动一些形成数据库集群的容器。我通过执行以下操作在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

我可以检查日志,然后启动就可以了。

使用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等等,为简单起见,这里没有显示)。

有人碰到这个吗?我知道用于ansible的docker模块使用docker-py和东西。我想知道是否存在与编织不相容的某种类型?

修改

我应该提一下,当容器启动时,它们实际显示在WeaveDNS中,而显示已添加到系统中。我可以ping每个容器的本地主机名,只要它在主机上。当我去其他主机时,它无法ping通另一台主机上的主机。尽管他们在WeaveDNS(weave status dns)和weave status中注册,但显示正确的对等体和已建立的连接。

1 个答案:

答案 0 :(得分:0)

这可能是由于客户端在Docker HostConfig请求中发送start结构,这实际上并不是你应该如何做到但是得到Docker支持“{{3} }”。

编织已经for backwards compatibility,但修复版尚未发布。如果你是勇敢的话,你可以试试fixed to cope

你可以通过在容器的配置中明确地将DNS解析器设置为docker bridge IP来克服它 - weave有一个未记录的帮助器weave docker-bridge-ip来查找这个地址,它通常不会改变。