docker - 链接的 docker 容器在关闭和启动时是否会获取链接?

标签 docker

我一直想知道链接的容器是否关闭并再次启动,与其链接的容器是否关闭 恢复 --link 连接?

点燃 2 个容器。

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

现在,如果 fluidd 容器停止并重新启动,railsapp 容器会自动恢复链接和链接的 ENV 变量吗?

最佳答案

更新:

从 Docker 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

您将在 /etc/hosts 中获得一个条目app_image内:

# /etc/hosts example
mysql 172.17.0.12

并且该IP将被刷新,以防mysql崩溃并重新启动。

因此,在引用链接容器时不要使用环境变量:

$ 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/

关于docker - 链接的 docker 容器在关闭和启动时是否会获取链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093498/

相关文章:

django - NGINX docker-compose - 在上游 nuxt :3000 中找不到主机

redis - 我如何使用 phusion/baseimage-docker "dockerize"一个 redis 服务

.net - Docket.DotNet 的 Docker 桌面问题,第二次调用 _dockerClient.Containers.StartContainerAsync() 将失败并出现 OperationCanceledException

docker - 使用 buildkit 构建时如何附加到中间 docker 容器

linux - 如何确定进程是否在 lxc/Docker 内部运行?

macos - Docker Toolbox Mac 命令行和 Kitematics 失败

python - 是否可以与 MySQL docker 容器建立 pymysql 连接?

docker - "correct"在docker中管理数据库模式的方法

java - 如何在 Digital Ocean 上的同一个 Droplet 中使用 postgresql 和 spring boot 应用程序

sql-server - 如何使用 docker desktop 将 kubernetes 集群连接到外部 SQL Server 数据库?