是否可以使用docker-compose在同一台主机上安装多个nginx容器,每个容器共享端口80?
我想整理一个在同一主机上运行多个应用程序的系统。 每个应用程序由几个链接的docker容器和docker-compose文件组成,每个应用程序使用主机系统的nginx作为反向代理暴露给世界。到目前为止,非常好。
每次我添加一个新的docker应用程序时,我都要为该应用程序添加一个新的nginx.conf文件给主机nginx,但我更喜欢将nginx配置与app的docker-捆绑在一起 - 将文件组合为nginx容器,从而让每个应用程序干净地维护容器中所需的一切。但是,每个nginx容器都需要侦听端口80,因此只有第一个才能绑定。主机nginx可以在端口80上侦听多个Web应用程序,但是多个nginx实例可以执行相同的操作吗?
更新:
所以看起来这并非严格可行。目标是将尽可能多的特定于应用程序的nginx配置与应用程序捆绑在一起,因此我尝试了一个解决方案,其中应用程序仍然使用该逻辑旋转其自己的nginx容器,而主机nginx仅处理url路由到app nginx。不确定性能,但这大大减少了与主机的应用纠缠。
答案 0 :(得分:5)
即使已经过了几年,我还是想为遇到这个问题的其他人回答。
不幸的是,没有。同一端口上不能有多个容器。这是由于操作系统的性质。但我想我可以理解您的尝试。您要拥有多个自定义配置Web应用程序。
最好的方法是通过 reverse proxy 。反向代理允许从主端口(例如80和433)到Web服务器的转发地址到其他端口或地址的转发。您所有的容器中都应包含Nginx,以及您的配置和代码。有两种方法可以做到这一点。
在docker中,最简单的方法是通过nginx-proxy project。只需在docker-compose的环境中添加变量,托管的nginx容器就会自动将您的请求转发到设置的站点。这似乎是您想要做的,因为它只需要一个docker-compose。
您也可以自己管理。保持所有站点在nginx中的其他端口上侦听,并在80和433上侦听一个主容器,该容器使用您创建的反向代理将请求转发到另一个端口。
祝你好运!