docker - 使用 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 作为我的反向代理。
解决方案
虽然我个人认为 Traefik 在你的情况下会节省时间,但还有另一个项目可以用 nginx 做你想做的事情:jwilder/nginx-proxy。
它通过监听 docker 引擎事件来工作,当容器被添加或删除时,它使用模板更新 nginx 配置。
您可以在 is is 使用这个docker 映像,也可以使用jwilder/docker-genjwilder/nginx-proxy
项目来制作自己的风格,该项目是在给定模板和 docker 引擎事件的情况下生成文件的部分。
但同样,我会推荐Traefik;节省了时间和麻烦,以及随之而来的所有功能(不同的负载平衡策略、健康检查、断路器、使用 ACME/Let's Encrypt 自动设置 SSL 证书,......)
推荐阅读
- macos - 如何在 Mac Os X 中每天运行 shell 脚本?
- python - 如何在 Anaconda 上安装 Selenium 以及如何在 Anaconda 的 Spyder IDE 上将 selenium 与 Scrapy 一起使用?
- python - 水蟒。无法获得 ACU
- mysql - 如何计算平均间隔时间
- javascript - 从 Google Chrome 发送时跳过 Chromecast 选择
- java - c#匿名接口实现
- c# - 在 Linq 中,在 Where 子句之后的 Single() 有用吗?
- python-3.x - 从一个单词中获取所有可能的 pos 标签
- javascript - redux中isPlainObject函数的实现
- datatable - 使用jquery从mysql数据库中获取数据到数据表中