0

长话短说:fig up没有正确链接 2 个容器docker run

设想:

有 2 个容器:一个带有 Cassandra,另一个带有客户端服务。当容器启动时,客户端希望cassandra在 hosts 文件中有主机名,并且能够访问它的 9042 端口。

我使用 docker 的链接将容器连接在一起。这是一个fig.yml

cassandra:
  image: "myrepo/cassandra"
  ports:
    - "7199:7199"
    - "9042:9042"
    - "9160:9160"
    - "61621:61621"
    - "2222:22"
  hostname: cassandra

client:
  image: myrepo/client
  links:
    - cassandra
  ports:
    - "8098:8098"
    - "8099:8099"
  hostname: client

当我这样做时fig up client, fig 启动 cassandra,然后是客户端,但客户端无法访问 cassandra 容器(它可以 ping 它,但无法访问 9042 端口)。

但是,如果我启动 cassandrafig up cassandra然后运行:

docker run --link tramm_cassandra_1:cassandra --link tramm_cassandra_1:cassandra_1 --link tramm_cassandra_1:tramm_cassandra_1 -p 8098:8098 -p 8099:8099 myrepo/client

然后客户端可以毫无问题地与 cassandra 通信。

我检查了容器,这里是输出:
- cassandra 检查
- fig up client inspect
- docker run client inspect

我能找到的唯一区别是HostConfig -> DevicesHostConfig -> LxcConf。在 fig-up 版本中,它们等于null,在 docker-run 版本中 - to []

有人可以解释它在“本机”docker场景中的区别fig up以及docker run为什么它在“本机”docker场景中有效,而在图中没有。

4

1 回答 1

2

这可能是因为 cassandra 需要很长时间才能真正开始监听端口。试一下fig up cassandra,稍等片刻,然后fig up --no-recreate client

也可以看看:

建议:容器在其暴露的 TCP 端口打开之前不应被视为已启动

有没有办法延迟容器启动以支持启动时间较长的依赖服务

于 2015-02-10T09:35:01.190 回答