图没有链接两个容器

长话短说:当docker run时, fig up并没有正确地链接2个容器。

场景:

有两个容器:一个是Cassandra,另一个是客户服务。 当容器启动时,Client期望在hosts文件中拥有cassandra主机名,并且能够到达它的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 ,无花果开始cassandra,然后客户端,但客户端无法到达cassandra容器(它可以ping它,但不能到达9042端口)。

但是,如果我用fig up cassandra开始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进行通信而不会出现问题。

我检查过容器,这里是输出:
– 卡桑德拉检查
– 无聊的客户端检查
– docker运行客户端检查

唯一的区别是我可以find在HostConfig -> DevicesHostConfig -> LxcConf 。 在fig-up版本中,它们等于null ,在docker-run版本中为[]

有人可以解释一下“ fig up和“ docker run之间的区别,以及为什么它在“本地”docker运行场景中工作,而不是无花果。

这可能是因为cassandra需要花费很多时间才能真正开始监听端口。 尝试fig up cassandra ,等待一段时间,然后fig up --no-recreate client

也可以看看:

build议:容器不应被视为启动,直到他们暴露的TCP端口打开

有没有办法延迟容器启动,以支持更长的启动时间从属服务