在一台主机上运行nginx后面的两个docker compose应用程序的最佳方法?

在一台主机上运行nginx后面的两个docker compose应用程序的最佳方法?,nginx,docker,docker-compose,Nginx,Docker,Docker Compose,我有两个docker compose应用程序: a、 com b、 com 我想在同一台主机上运行它们,并放置一个nginx容器代理,将传入的请求路由到每个docker compose应用程序中的正确服务 我想我需要有一个单独的nginx容器与两个docker compose应用程序分开运行。我以前使用过,但是我的路由变得更复杂了,所以我现在想运行我自己的nginx实例 我不知道如何将这两个应用程序和nginx容器连接起来,使它们都能正常工作 当我docker运行我得到的nginx容器时:

我有两个docker compose应用程序:

  • a、 com
  • b、 com
我想在同一台主机上运行它们,并放置一个nginx容器代理,将传入的请求路由到每个docker compose应用程序中的正确服务

我想我需要有一个单独的nginx容器与两个docker compose应用程序分开运行。我以前使用过,但是我的路由变得更复杂了,所以我现在想运行我自己的nginx实例

  • 我不知道如何将这两个应用程序和nginx容器连接起来,使它们都能正常工作
  • 当我
    docker运行
    我得到的nginx容器时:
    在上游的“MY_container\u host\u NAME”中找不到主机
    ,这表明我的应用程序主机名没有从nginx容器中解析
  • 如果需要,我可以发布我的nginx配置,但这实际上是一个docker网络/最佳实践问题

nginx代理应该足够好,只要它支持docker swarm连接的网络(,仍在等待)

您也可以考虑,每当部署新的服务时,或者当服务被缩放时,重新配置代理的简单方法。


请参阅“”,了解具体示例。

我可以想出两个选项:

第一名:

在同一docker用户定义的网络中运行应用程序和nginx。为此,您需要首先创建一个用户定义的网络:

docker network create appnet
然后更改docker文件,将appnet网络用作外部网络(外部网络不会创建网络并使用现有网络)

秒:

创建两个名为appnet1和appnet2的用户定义网络,将a.com连接到appnet1,将b.com连接到docker compose中标记为外部网络的appnet2。然后启动nginx并将其连接到appnet1和appnet2

当docker运行nginx容器时,我得到:主机未在中找到 上游“MY_CONTAINER_HOST_NAME”,表示我的应用程序主机名 未从nginx容器中解析

请注意:用户定义的网络将提供内部DNS,因此您可以按容器名称调用同一网络上的容器

外部网络示例:

如果希望容器加入预先存在的网络,请使用外部选项:

networks:
  default:
    external:
      name: my-pre-existing-network

Compose不会尝试创建名为[projectname]\u default的网络,而是查找名为my pre-existing network的网络,并将应用程序的容器连接到该网络

感谢您的帮助。我真的很想学习如何手工操作来理解Docker是如何工作的。编写自己的nginx代理以在一台主机上管理两个compose应用程序的最佳方式是什么?