我有两个docker-compose应用程序:
我想在同一台主机上运行它们,并放置一个nginx容器代理,将传入的请求路由到每个docker-compose应用程序中的正确服务。
我想我需要一个单独的nginx容器与两个docker-compose应用程序分开运行。我以前使用nginx-proxy,但我的路由更复杂,所以我想现在运行自己的nginx实例。
docker run
我获得的nginx容器时:host not found in upstream "MY_CONTAINER_HOST_NAME"
,这表明我的应用主机名不是从nginx容器中解析的。答案 0 :(得分:1)
nginx-proxy应该足够好,前提是它支持docker swarm附加网络(issue 520,仍处于待处理状态)
您还可以考虑使用vfarcic/docker-flow-proxy
,这是每次部署新服务或缩放服务时重新配置代理的简便方法。
参见" Integrating Proxy With Docker Swarm (Tour Around Docker 1.12 Series)"举一个具体的例子。
答案 1 :(得分:1)
我可以想到两个选项:
首先:
在同一个docker用户定义的网络中运行apps和nginx。为此,您需要首先创建一个用户定义的网络:
docker network create appnet
然后更改您的docker文件以将appnet网络用作外部网络(外部网络不会创建网络并使用现有网络)
<强>第二强>
创建2个用户定义的网络,名为appnet1和appnet2,将a.com连接到appnet1,将b.com连接到appnet2,标记为docker-compose中的外部网络。然后调出nginx并将其附加到appnet1和appnet2。
当我的docker运行nginx容器时,我得到:找不到主机 上游“MY_CONTAINER_HOST_NAME”,表示我的应用主机名 没有从nginx容器中解析。
请注意:用户定义的网络将提供内部DNS,因此您可以按容器名称在同一网络上调用容器。
外部网络示例:
如果您希望容器加入预先存在的网络,请使用外部选项:
networks:
default:
external:
name: my-pre-existing-network
Compose不会尝试创建一个名为[projectname] _default的网络,而是寻找一个名为my-pre-existing-network的网络,并将应用程序的容器连接到它上面