链接的docker集装箱会在链接停下来时连上链接吗?
我一直在想,如果链接的容器closures,并重新启动,与它链接的容器恢复链接?
消防2个容器。
docker run -d --name fluentd millisami/fluentd docker run -d --name railsapp --link fluentd:fluentd millisami/rails
现在,如果fluentd容器停止并重新启动,那么railsapp
容器会自动恢复链接和链接的ENVvariables吗?
更新:
从Docker 1.3开始(或者甚至可能来自早期版本,不确定),如果/etc/hosts
文件重新启动,它将使用链接容器的新IP进行更新 。 这意味着如果你通过它在/etc/hosts
项中的名字来访问它,而不是环境variables, 你的链接在重启之后仍然可以工作 。
例:
当你启动两个容器app_image
和mysql
,并像这样链接它们:
$ 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
而且这个ip会在mysql
崩溃并重新启动的情况下被刷新。
因此,在引用链接容器时不要使用环境variables:
$ 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
老答案:
不,不会的。 在容器崩溃的情况下,链接和死亡一样好。 我认为这是一个公开的问题,也就是说,有很多候选scheme,但是还没有哪个scheme能够成为标准的方法。
你可能想看看http://jasonwilder.com/blog/2014/07/15/docker-service-discovery/