长话短说:fig up
在docker 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 -> Devices
和HostConfig -> LxcConf
。在fig-up版本中,它们等于null
,码头运行版本 - 至[]
。
有人可以解释一下fig up
和docker run
之间的区别,以及它为什么在'原生'泊坞窗的情况下工作,并没有在图。
这可能是因为卡桑德拉需要大量的时间来真正开始在端口上侦听。尝试'fig up cassandra',等待一会儿,然后'不要重新创建客户端'。 – SeMeKh 2015-02-10 09:25:43
这是一个绝妙的主意。虽然我之前检查过这个场景,但是我在客户启动时注入了延迟,但'--no-recreate'标志做得更好。 (竖起大拇指)。您是否同意将其添加为答案,以便我可以标记它? – Dima 2015-02-10 09:31:16
很高兴帮助。添加它作为答案。 – SeMeKh 2015-02-10 09:36:36