如何刷新容器链接

我有两个docker:一个是nginx前端,另一个是expressjs应用程序。 Nginx是入口点,它代表了一个expressjs的代理。

我做:

docker run -d --name 'expressjs' geographica/expressjs docker run -d --name 'nginx' --link expressjs nginx 

之后,当我更新图像geographica / expressjs我需要重新创buildexpressjs容器:

 docker stop expressjs && docker rm expressjs && docker run -d --name 'expressjs' geographica/expressjs 

在这一点上,我也需要重新创buildnginx容器。 怎么能不重新创buildnginx容器?

这是对我们的问题的简化,我们真正的服务器有一个nginx前端和N个应用程序,所以每次我们更新一个应用程序时,我们需要重新启动nginx并停止为其他应用程序提供服务。

请避免docker解决scheme。 我不想为所有的应用程序有一个独特的/巨大的docker-compose文件。

更新:

我也认为这样的事情会有用的。 https://github.com/docker/docker/issues/7468 。 在运行时使用docker link命令更改容器链接。 不幸的是,它在1.8.2中不可用。

这是在问题6350讨论:

如果我明确地做一个docker重新启动IP是正确更新,但是我使用“systemctl重新启动”,在运行之前停止,杀死和rm

在这种情况下(“stop-rm-run”),链接不刷新:

docker工人不认为应该链接到同名的容器

所有新的容器完全不相关后,保持这个“连接”并不总是有意义的。

我的解决scheme和我的build议是:

  • 你可以看一下像大使模式那样强大一点的东西,这种模式只是说你连接到一个你永远不会重新启动的代理的奇特方式 – 以保持docker链接的活跃。
    (也在这里介绍 )
  • 另一个解决scheme是docker createdocker startdocker stop而不是docker rm
  • 最后,我的实际解决scheme是使用诸如SkyDNS或docker-gen之类的东西来保存一个包含所有容器名称的中央DNS。 这最后的解决scheme,这对我来说是最好的,因为它允许我在主机和docker链接之间移动容器不能这样工作。

随着Docker的下一个版本, libnetwork实际上将走的路。
(请参阅“ 集装箱networking模型(CNM) ”和“ Docker在线聚会#22:Dockernetworking – video ”)