10

我正在运行 Docker Compose (v2) 并有一个节点服务(网站)和基于 python 的 api,其中 nginx 位于它们前面。

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

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

4

1 回答 1

13

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

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

另一种方法(对多主机更友好但更复杂)是在注册表中注册服务(例如 etcd 或 Consul),然后动态写出配置。为此,您可以使用注册系统(例如https://github.com/gliderlabs/registrator)来注册容器及其端口。然后,您的代理或应用程序可以使用使用模板系统编写的配置文件,例如https://github.com/kelseyhightower/confd

于 2016-04-17T17:10:16.993 回答