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

5
我有一个nginx docker容器和一个webapp容器,它们成功运行并相互通信。nginx容器监听端口80,并使用proxy_pass将流量定向到webapp容器的IP地址。
"humansio"在/etc/hosts文件中由docker设置,因为我使用--link humansio:humansio启动了nginx。Webapp容器(humansio)始终公开8080端口。问题是,当我重新加载webapp容器时,与nginx容器的链接会断开,我需要重新启动nginx容器。有没有办法可以不需要重新启动nginx容器就能重载webapp容器呢?
我尝试过通过使用共同的端口(两个上都是8001)来手动连接它们,但由于它们实际上保留该端口,第二个容器也无法使用它。谢谢!

1
你使用的Docker版本是什么?在重启Web应用程序容器后,Nginx容器的/etc/hosts内容是否更新? - Javier Cortejoso
3个回答

2

2

0

如果您使用一些现代版本的Docker,nginx容器中到您的Web服务的链接可能会被更新(您可以通过docker exec -ti nginx bash命令检查它,然后查看/etc/hosts文件)- 问题是nginx并不总是使用/etc/hosts文件 - 它会缓存IP地址,当它发生变化时,就会迷失方向。'docker kill -s HUP nginx'可以使nginx重新加载其配置而无需重启,这也有所帮助。

我也遇到了同样的问题。我曾经使用systemd单元文件启动我的服务 - 当您将一个服务(nginx)依赖于另一个服务(webapp),然后重新启动webapp时,systemd足够聪明,会同时重新启动nginx。现在我正在尝试使用docker-compose,并且重新启动webapp容器会让nginx感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接