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

标签 docker nginx docker-compose

是否可以仅使用 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/

相关文章:

amazon-web-services - Docker AWS ECR 错误解析 HTTP 404 响应正文 : invalid character 'p' after top-level value: "404 page not found\n"

windows - 如何使用 docker compose 卷挂载 windows 文件夹?

Azure CloudApp - 如何正确设置 CNAME DNS (NGINX)

ssl - 使用自签名证书在 Chrome 上失败的客户端身份验证

docker-compose - 重启策略 - 不保留图像中的更改

tomcat - docker镜像中的tomcat文件夹在哪里

url - Nginx可以基于URL运行Unix命令吗?

docker-compose:为多个服务使用多个 Dockerfile

node.js - Chokidar 没有获取 docker 容器内的文件更改

docker - Docker 卷中的文件不会在文件更改时在 Windows 上刷新