2015-02-10 41 views
0

长话短说:fig updocker run没有链接时没有正确链接2个容器。图没有链接两个容器

场景:

有2个容器:一个与卡桑德拉,另一种与客户服务。当容器启动时,Client期望在主机文件中具有cassandra主机名,并且能够达到它的9042端口。

我使用码头的链接到紧的容器在一起。这里是一个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,无花果开始卡桑德拉,然后客户端,但客户端不能达到卡桑德拉容器(它可以ping到它,但不能达到9042端口)。

但是,如果我开始与卡桑德拉和fig 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 inspect
- fig up client inspect
- docker run client inspect

我能找到的唯一区别是在HostConfig -> DevicesHostConfig -> LxcConf。在fig-up版本中,它们等于null,码头运行版本 - 至[]

有人可以解释一下fig updocker run之间的区别,以及它为什么在'原生'泊坞窗的情况下工作,并没有在图。

+0

这可能是因为卡桑德拉需要大量的时间来真正开始在端口上侦听。尝试'fig up cassandra',等待一会儿,然后'不要重新创建客户端'。 – SeMeKh 2015-02-10 09:25:43

+0

这是一个绝妙的主意。虽然我之前检查过这个场景,但是我在客户启动时注入了延迟,但'--no-recreate'标志做得更好。 (竖起大拇指)。您是否同意将其添加为答案,以便我可以标记它? – Dima 2015-02-10 09:31:16

+0

很高兴帮助。添加它作为答案。 – SeMeKh 2015-02-10 09:36:36

回答