使用 Docker 和 Nginx proxy_pass 时重启容器

Restarting Containers When Using Docker and Nginx proxy_pass

我有一个 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 容器 (humansio) 总是暴露 8080。

问题是,当我重新加载 webapp 容器时,link 到 nginx 容器中断,我也需要重新启动它。有什么方法可以让我以不同的方式执行此操作,这样我就不需要在重新加载 webapp 容器时重新启动 nginx 容器吗?

--

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

谢谢!

如果您不想在必须重新启动代理容器之一时重新启动代理容器(例如 fig), you could take a look at the autoupdated proxy configuration approach: http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/

出于这个原因,我更喜欢 运行 直接在主机上使用代理(haproxy 的 nginx)。

但一个选项是 "Link via an Ambassador Container" 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

如果你使用一些现代版本的 docker nginx 容器中到你的网络服务的链接可能会更新(你可以用 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 感到困惑。