图不link两个容器
Fig doesn't link two containers
长话短说:fig up
没有 link 2 个容器,而 docker run
可以。
场景:
有 2 个容器:一个带有 Cassandra,另一个带有客户端服务。当容器启动时,客户端希望主机文件中有 cassandra
主机名,并且能够到达它的 9042 端口。
我使用 docker 的 link 将容器紧密地连接在一起。这是一个 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,然后client但是client无法访问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通信。
我检查了容器,这里是输出:
- cassandra inspect
- fig up client inspect
- docker run client inspect
我能找到的唯一区别是 HostConfig -> Devices
和 HostConfig -> LxcConf
。在数字版本中,它们等于 null
,在 docker-运行 版本中 - 等于 []
.
有人可以解释一下 fig up
和 docker run
之间的区别,以及为什么它在 'native' docker 场景中有效而在图 1 中不起作用。
可能是因为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
长话短说:fig up
没有 link 2 个容器,而 docker run
可以。
场景:
有 2 个容器:一个带有 Cassandra,另一个带有客户端服务。当容器启动时,客户端希望主机文件中有 cassandra
主机名,并且能够到达它的 9042 端口。
我使用 docker 的 link 将容器紧密地连接在一起。这是一个 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,然后client但是client无法访问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通信。
我检查了容器,这里是输出:
- cassandra inspect
- fig up client inspect
- docker run client inspect
我能找到的唯一区别是 HostConfig -> Devices
和 HostConfig -> LxcConf
。在数字版本中,它们等于 null
,在 docker-运行 版本中 - 等于 []
.
有人可以解释一下 fig up
和 docker run
之间的区别,以及为什么它在 'native' docker 场景中有效而在图 1 中不起作用。
可能是因为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