【问题标题】:Weave + Ansible Docker ModuleWeave + Ansible Docker 模块
【发布时间】:2015-10-07 02:21:47
【问题描述】:

我正在使用 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

  - 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 中注册,但显示正确的对等点数和已建立的连接数。

【问题讨论】:

  • 与此同时,我采取的解决方法是使用command 模块。我将保持开放状态,因为它仍然是 AFAICT 的一个问题。
  • 首先,我想知道Ansible Docker模块是使用Python客户端还是调用docker?其次,请检查docker logs weaveproxy? 确认请求通过代理
  • @errordeveloper 是的,它使用 docker-py,我记不起日志。我将在本周末恢复更改以进行测试,以尝试建议的内容并回复。
  • 你有没有找到解决上述问题的方法?
  • @MateVarga 不,我使用了command 模块。与 CLI 相比,我怀疑它与 python lib 的实现方式有关,但不能确定。

标签: docker ansible weave


【解决方案1】:

这可能是由于客户端在 Docker start 请求中发送 HostConfig 结构引起的,这并不是你应该做的,但 Docker "for backwards compatibility" 支持。

Weave 一直是fixed to cope,但修复尚未发布。如果你有勇气,你可以试试latest snapshot version

您可以通过在容器配置中将 DNS 解析器显式设置为 docker 网桥 IP 来解决这个问题 - weave 有一个未记录的帮助器 weave docker-bridge-ip 来查找此地址,它通常不会更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2015-06-06
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多