自动将Docker容器附加到Nginx负载均衡器的上游配置

11

我正在运行 Docker Compose(v2),其中有一个使用 Node.js 实现的网站服务,以及一个基于 Python 的 API,并使用 Nginx 作为它们的前置代理。

我想做的一件事是通过添加更多容器来扩展服务。如果我预先知道将会有多少个容器,我可以在 Nginx 的 upstream 配置中硬编码引用容器可用的 IP 地址。但是,问题在于我希望 upstream nginx 配置是动态的,例如,如果我添加另一个 Docker 容器,它只是将容器的位置添加到 upstream IP 列表的末尾。

我的想法是创建一个脚本,在容器更改时自动使用环境变量追加 upstream 服务器,但我不确定从哪里开始,并且找不到一个好的示例。

1个回答

14
有几种方法可以实现这个。你所说的通常被称为“服务发现”,并有许多形式。我将描述两种我以前使用过的方法。
第一种,也是最简单的一种(适用于单个服务器或仅在一个服务器上本地发现容器),是使用Docker套接字或API的本地代理。https://github.com/jwilder/nginx-proxy是其中一个受欢迎的选择,适合在Compose中原型可扩展的服务。
另一种方式(更适合多主机,但更复杂)是在注册表中注册服务(例如etcd或Consul),然后动态编写配置。为此,您可以使用注册系统(例如https://github.com/gliderlabs/registrator)注册容器及其端口。然后,您的代理或应用程序可以使用类似https://github.com/kelseyhightower/confd的模板系统编写出配置文件。

这看起来正是我所寻找的,谢谢! - ExoticChimp

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