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

Automatically append docker container to upstream config of nginx load balancer

我是 运行 Docker Compose (v2) 并有一个节点服务(网站)和 python 基于 api 部署,nginx 坐在他们面前.

我想做的一件事是能够通过添加更多容器来扩展服务。如果我提前知道我将拥有多少个容器,我可以使用 docker 提供的对容器 IP 的引用对 nginx 上游配置进行硬编码。但是,问题是我希望上游 nginx 配置是动态的,例如如果我添加另一个 Docker 容器,它只是将容器的位置添加到上游块中的上游 IP 列表。

我的想法是创建一个脚本,当容器发生变化时,它会使用环境变量自动附加上游服务器,但我不确定从哪里开始,也找不到一个好的例子。

有几种方法可以实现这一点。您所指的通常称为 服务发现 并且有多种形式。我将描述其中两个我以前使用过的。

第一个也是最简单的一个(适用于单个服务器或仅在一个服务器上本地发现容器)是使用 Docker 套接字或 API 的本地代理。 https://github.com/jwilder/nginx-proxy 是最受欢迎的之一,应该适用于在 Compose 中对可扩展服务进行原型设计。

另一种方式(对多主机更友好但更复杂)是在注册表(例如 etcd 或 Consul)中注册服务,然后动态写出配置。为此,您可以使用注册系统(例如 https://github.com/gliderlabs/registrator) to register the containers and their ports. Then your proxy or application can consume a configuration file written out using a template system like https://github.com/kelseyhightower/confd.