链接的泊坞窗容器在链接发生故障时会获取链接吗?

问题描述:

我一直在想,如果链接的容器关闭并重新开始,与它链接的容器 是否会恢复--link连接?链接的泊坞窗容器在链接发生故障时会获取链接吗?

火2个容器。

docker run -d --name fluentd millisami/fluentd 
docker run -d --name railsapp --link fluentd:fluentd millisami/rails 

现在,如果fluentd容器被停止和重新启动,将在railsapp容器恢复的链接和链接ENV自动瓦尔?

+0

现在看来似乎应该,但要小心的联网。如果你正在使用'docker run -e'来根据容器的IPAddress或Ports(如果它们是由docker生成的)动态设置环境变量,那么它们将不会更新。 – jphager2 2014-09-29 06:39:11

+0

[如何设置码头集装箱之间的链接,以便重新启动不会打破它?]的可能重复(http://*.com/questions/24252598/how-to-setup-linkage-between-docker-containers-so -that-restarting-wont-break-it) – 2014-09-30 04:57:03

UPDATE:

由于码头工人1.3(或者甚至可能从早期的版本,不知道),在/etc/hosts文件将与链接容器的新的IP,如果重新启动更新。这意味着如果您通过/etc/hosts条目中的名称(而不是环境变量)访问它,则即使重新启动后,您的链接仍然可以正常工作。

例子:

当你开始两个容器app_imagemysql并将其链接如下:

$ docker run --name mysql mysql:5.6.20 
$ docker run -d --link mysql:mysql app_image 

您会在app_image得到您的/etc/hosts一个条目:

# /etc/hosts example 
mysql 172.17.0.12 

并且在mysql崩溃并重新启动的情况下,ip将被刷新。

指你的链接容器时,因此,不要使用环境变量:

$ ping $MYSQL_PORT_3306_TCP_ADDR # --> don't use! won't work after the linked container restarts 

$ ping mysql # --> instead, access it by the name as in /etc/hosts 

老答案:

不,不会。在容器崩溃的情况下,链接和死亡一样好。我认为这是一个悬而未决的问题,也就是说,有很多候选解决方案,但没有一个能够成为标准方法。

你可能想看看http://jasonwilder.com/blog/2014/07/15/docker-service-discovery/

+0

你可以做'ping mysql' ?!哇。没有意识到/ etc/hosts是那么神奇!非常好的答案;不确定为什么当'/ etc/hosts'更容易使用并且稳定在重启时,为什么官方Docker文档会继续大肆宣传ENV变量....让我非常头痛! – cboettig 2015-02-16 21:36:40

+1

您可能仍然需要保持警惕,我认为Docker有时(有10%的时间)无法更新链接,这有点让人头疼。所以为了克服这个问题,我最终使用了更强大的Consul服务发现(consul.io),并且可以扩展到多个机器/集群 – lolski 2015-02-17 02:30:04

+0

好吧,很高兴知道。到目前为止我看起来很稳定,而且非常简单。有没有一个已知的错误/问题在Docker上关注上述故障? – cboettig 2015-02-17 21:40:39