是否可以在同一主机上运行多个 nginx docker 容器?

Shu*_*ams 12 nginx docker docker-compose

是否可以仅使用 docker-compose 在同一台主机上安装多个 nginx 容器,每个容器共享端口 80?

我想整理一个在同一主机上运行多个应用程序的系统。每个应用程序由多个链接的 docker 容器组成,这些容器通过 docker-compose 文件绑定在一起,每个应用程序都使用主机系统的 nginx 作为反向代理向世界公开。到现在为止还挺好。

每次添加新的 docker 应用程序时,我都必须为该应用程序添加一个新的 nginx.conf 文件到主机 nginx,但我更喜欢将 nginx 配置与应用程序的 docker-compose 文件捆绑在一起作为 nginx 容器,因此让每个应用程序在容器中干净地维护它需要的一切。但是每个nginx容器都需要监听80端口,所以只能绑定第一个。主机 nginx 可以在端口 80 上侦听多个 web 应用程序,但是多个 nginx 实例可以做同样的事情吗?

更新 :

所以这似乎不是绝对可能的。目标是将尽可能多的特定于应用程序的 nginx 配置与应用程序捆绑在一起,因此我正在尝试一种解决方案,其中应用程序仍然使用该逻辑启动自己的 nginx 容器,而主机 nginx 仅处理到应用程序 nginx 的 url 路由. 不确定性能,但这大大减少了应用程序与主机的纠缠。

小智 10

即使已经过去几年了,我想我也可以为其他遇到此问题的人回答。

抱歉不行。在同一个端口上不可能有多个容器。这是由操作系统的性质决定的。但我想我能理解你想要做什么。您希望拥有多个自定义配置 Web 应用程序。

最好的方法是通过反向代理。什么反向代理允许将地址从主端口(例如 80 和 433)转发到 Web 服务器到其他端口或地址。你的所有容器都应该有 Nginx 和你的配置和代码。有两种方法可以做到这一点。

在 docker 中,最简单的方法是通过nginx-proxy 项目。只需向 docker-compose 中的环境添加一个变量,托管的 nginx 容器就会自动将您的请求转发到设置的站点。这似乎是您想要做的,因为它只需要一个 docker-compose。

您也可以自己管理。保持所有站点监听 nginx 中的其他端口,并让一个主容器监听 80 和 433,使用您创建的反向代理将请求转发到另一个端口。

祝你好运!