图没有连接两个容器

时间:2015-02-10 04:01:20

标签: docker boot2docker fig

长话短说:fig up docker run时,cassandra无法正确链接2个容器。

情境:

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

我将docker的链接用于紧密的容器。这是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 up cassandra时,fig启动cassandra,然后客户端但客户端无法访问cassandra容器(它可以ping通,但无法到达9042端口)。

但是,如果我使用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,然后运行:

HostConfig -> Devices

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

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

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

有人可以解释docker run和{{1}}之间的区别以及为什么它可以在本地' docker场景并没有在图中。

1 个答案:

答案 0 :(得分:2)

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

另见:

Proposal: Containers should not be considered started until the TCP ports they expose are open

Is there a way to delay container startup to support dependant services with a longer startup time