使用Docker和Nginx proxy_pass时重新启动容器

时间:2015-03-03 05:01:04

标签: nginx docker proxypass

我有一个nginx docker容器和一个成功运行并且互相交谈的webapp容器。

nginx容器侦听端口80,并使用proxy_pass将流量定向到webapp容器的IP。

upstream app_humansio { server humansio:8080 max_fails=3 fail_timeout=30s; }

“humansio”由docker在/etc/hosts文件中设置,因为我已经使用--link humansio:humansio启动了nginx。 webapp容器(humanio)总是暴露8080。

问题是,当我重新加载webapp容器时,nginx容器的链接中断,我也需要重新启动它。我有什么方法可以这样做,所以当webapp容器重新加载时我不需要重新启动nginx容器吗?

-

我试图通过使用公共端口(两者都是8001)手动连接它们,但由于它们实际上保留了该端口,因此第二个容器也不能使用它。

谢谢!

3 个答案:

答案 0 :(得分:2)

如果您不想在必须重新启动其中一个代理容器(例如fig)时重新启动代理容器,则可以查看自动更新的代理配置方法:http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/

答案 1 :(得分:2)

我更喜欢直接在主机上运行代理(haproxy的nginx)。

但是选择是通过大使集装箱"链接#34; https://docs.docker.com/articles/ambassador_pattern_linking/

https://www.digitalocean.com/community/tutorials/how-to-use-the-ambassador-pattern-to-dynamically-configure-services-on-coreos

答案 2 :(得分:0)

如果您使用一些现代版本的docker,nginx容器中的链接到您的Web服务可能会更新(您可以使用docker exec -ti nginx bash检查它 - 然后cat / etc / hosts) - 问题是nginx不'使用/ etc / hosts每次 - 它缓存ip,当它发生变化时 - 他迷路了。 'docker kill -s HUP nginx'使得nginx重启其配置而不重启也有帮助。

我有同样的问题。我曾经用systemd单元文件启动我的服务 - 当你使一个服务(nginx)依赖于其他(webapp)然后重新启动webapp时 - systemd也足够聪明地重启nginx。现在,我正在尝试使用docker-compose并重新启动webapp容器混淆nginx。