首页 > 解决方案 > 使用 nginx 作为反向代理和负载均衡器,有没有办法在使用 docker-compose 时自动检测新的容器实例?

问题描述

我有一个 docker-compose 设置,其中一个 nginx 容器被用作构成我的应用程序的其余容器的反向代理和负载均衡器。

我可以使用启动应用程序docker-compose up -d,一切都很好。然后,我可以使用 扩展我的一项服务docker-compose up -d --scale auth=3,并且一切正常。

唯一的问题是 nginx 还不知道这两个新实例,所以我需要使用 手动重启正在运行的容器内的 nginx 进程docker exec revproxy nginx -s reload,“revproxy”是 nginx 容器的名称。

这很好,很漂亮,当我决定扩展我的一项服务时,我不介意运行额外的命令。但真正的问题是,当某个地方出现容器故障时...... nginx 需要在发生这种情况时立即知道以停止向故障实例发送流量,直到 Docker 引擎能够用健康的实例替换它。

说了这么多,基本上我想完成他们在Traefik 快速入门教程中所做的事情,除了我想坚持使用 nginx 作为我的反向代理。

标签: dockernginxdocker-composeload-balancingreverse-proxy

解决方案


虽然我个人认为 Traefik 在你的情况下会节省时间,但还有另一个项目可以用 nginx 做你想做的事情:jwilder/nginx-proxy

它通过监听 docker 引擎事件来工作,当容器被添加或删除时,它使用模板更新 nginx 配置。

您可以在 is is 使用这个docker 映像,也可以使用jwilder/docker-genjwilder/nginx-proxy项目来制作自己的风格,该项目是在给定模板和 docker 引擎事件的情况下生成文件的部分。

但同样,我会推荐Traefik;节省了时间和麻烦,以及随之而来的所有功能(不同的负载平衡策略、健康检查、断路器、使用 ACME/Let's Encrypt 自动设置 SSL 证书,......)


推荐阅读