长话短说: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 -> Devices
和HostConfig -> LxcConf
。在 fig-up 版本中,它们等于null
,在 docker-run 版本中 - to []
。
有人可以解释它在“本机”docker场景中的区别fig up
以及docker run
为什么它在“本机”docker场景中有效,而在图中没有。