是否可以仅使用 docker-compose 在同一台主机上安装多个 nginx 容器,并且每个容器共享端口 80?
我想整理一个在同一主机上运行多个应用程序的系统。 每个应用程序都由多个链接的 docker 容器组成,这些容器与 docker-compose 文件捆绑在一起,并且每个应用程序都使用主机系统的 nginx 作为反向代理向外界公开。到目前为止,一切顺利。
每次添加新的 docker 应用程序时,我都必须将该应用程序的新 nginx.conf 文件添加到主机 nginx,但我更喜欢将 nginx 配置与应用程序的 docker-compose 文件捆绑为 nginx 容器,从而让每个应用程序干净地维护容器中所需的一切。但是,每个 nginx 容器都需要监听 80 端口,因此只有第一个容器可以绑定(bind)。主机 nginx 可以监听端口 80 上的多个 Web 应用程序,但是多个 nginx 实例可以执行相同的操作吗?
更新:
所以看来这严格来说是不可能的。目标是将尽可能多的特定于应用程序的 nginx 配置与应用程序捆绑在一起,因此我正在尝试一种解决方案,其中应用程序仍然使用该逻辑启动自己的 nginx 容器,而主机 nginx 仅处理到应用程序 nginx 的 url 路由。不确定性能,但这大大减少了应用程序与主机的纠缠。
最佳答案
尽管已经过去了几年,我想我不妨为遇到这个问题的其他人回答一下。
不幸的是,没有。同一端口上不可能有多个容器。这是由操作系统的性质决定的。但我想我能理解你想做什么。您想要拥有多个自定义配置 Web 应用程序。
最好的方法是通过 reverse proxy 。反向代理的作用是允许您将来自主端口(例如 80 和 433)的请求转发到其他端口或地址上的 Web 服务器。假设您的所有容器都有自己的 Nginx 实例(或任何其他 Web 服务器)以及您的配置和代码。有两种方法可以做到这一点。
在 docker 中,最简单的方法是通过 nginx-proxy project 。只需向 docker-compose 中的环境添加一个变量,托管的 nginx 容器就会自动将您的请求转发到设置的站点。这似乎是您想要做的,因为它只需要一个 docker-compose。
您也可以自己管理。让所有站点监听 nginx 中的其他端口,并让一个主 nginx 容器监听 80 和 433,使用您创建的反向代理将请求转发到另一端口。
祝你好运!
关于docker - 是否可以在同一主机上运行多个 nginx docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47011323/