链接的docker容器在下降和上升时会得到链接吗?

链接的docker容器在下降和上升时会得到链接吗?,docker,Docker,我一直在想,链接的容器是否会关闭并重新启动,与之链接的容器是否会关闭并重新启动 恢复--link连接 点燃2个容器 docker run -d --name fluentd millisami/fluentd docker run -d --name railsapp --link fluentd:fluentd millisami/rails 现在,如果fluentd容器停止并重新启动,railsapp容器是否会自动恢复链接和链接的环境变量?更新: 从Docker 1.3开始(甚至可能是早期

我一直在想,链接的容器是否会关闭并重新启动,与之链接的容器是否会关闭并重新启动 恢复--link连接

点燃2个容器

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

现在,如果fluentd容器停止并重新启动,
railsapp
容器是否会自动恢复链接和链接的环境变量?

更新:

从Docker 1.3开始(甚至可能是早期版本,不确定),如果重新启动,
/etc/hosts
文件将使用链接容器的新ip进行更新。这意味着,如果您通过
/etc/hosts
条目中的名称而不是环境变量来访问它,您的链接即使在重新启动后仍会工作

例如:

当您启动两个容器
app\u image
mysql
并将其链接如下:

$ docker run --name mysql mysql:5.6.20
$ docker run -d --link mysql:mysql 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
旧答案:

不,不会的。在容器崩溃的情况下,链接就像死了一样。我认为这几乎是一个开放的问题,即有许多备选解决方案,但没有一个方案可以被称为标准方法


您可能想看一看

这似乎是应该的,但要小心网络。如果您使用
docker run-e
基于容器的IP地址或端口(如果它们是由docker生成的)动态设置环境变量,那么这些变量将不会更新。您只需执行
ping mysql
即可?!哇!没想到/etc/hosts有那么神奇!回答得很好;不确定为什么docker官方文档继续大肆宣扬环境变量,因为
/etc/hosts
既易于使用,又在重启时保持稳定。。。。你救了我很多头痛!你可能还想保持警惕,我认为Docker有时(比如10%的时间)无法更新链接有点小故障。为了克服这个问题,我最终使用了concur服务发现(concur.io),它更健壮,可以扩展到多台机器/集群,这很好。到目前为止,对我来说似乎很稳定,而且非常简单和容易。关于上述故障,Docker是否有已知的错误/问题需要关注?