答案 0 :(得分:0)
Docker不直接支持您所描述的内容。它真正支持的唯一的networking setup开箱即用的是每个应用程序都具有专用于主机的NAT的专用网络。如果您认为需要某种更复杂的拓扑,交通拦截器或自动代理,则可以使用“手动构建”。
在您显示的图表中,有两件事对我产生了影响。将“ App 1”和“ App 2”显示在同一容器中,这几乎不是最佳实践。每个组件都有一个localhost
URL,但这也是一个微妙的话题(在Docker容器中,容器本身为localhost
)。
一个非常典型的设置本身不使用自动流量拦截 ,而只是让外部客户端针对某种反向代理。看起来有点像
+- Docker network ----------------------+
| +- Container -+ +- Container -+ |
| | Application | <-- | Nginx Proxy | <---- Client
| +-------------+ +-------------+ |
+---------------------------------------+
您可以使用
开始此堆栈docker network create appnet
docker run --net appnet --name application my/application
docker run --net appnet --name nginx_proxy -p 8081:80 my/nginx
由于两个容器位于同一Docker网络上,因此nginx配置可以proxy_pass http://application/;
。由于使用-p
选项,外部客户端可以访问http://host.example.com:8081/
并将其转到代理。