我的节点Web服务器在端口5500上使用express和listen。 我的dockerfile-compose不公开节点网络服务器(命名为网络服务器)的任何端口,如下所示:
version: "3"
services:
webserver:
build: ./server
form:
build: ./ui
ports:
- "6800:80"
networks:
- backend // i let the backend network just for legacy but in fact webserver isn't in this networks
command: [nginx-debug, '-g', 'daemon off;']
networks:
后端:
我的Nginx反向代理如下:
/request {
proxy_pass http://webserver:5500/request
}
期望:由于两个服务之间缺少共享网络,因此请求必须失败。 结果:请求成功。
我不明白为什么?也许容器之间的默认网络可以完成这项工作? 更多信息:当reverse_proxy重定向到一个错误的端口时,请求失败,但是如果域名错误并且端口良好,则请求成功,如下所示:
proxy_pass http://webver:5500/request>成功
我在这里不了解Nginx / Docker流程。有人请向我们解释这里会发生什么?
答案 0 :(得分:2)
更多最新版本的Docker Compose create a Docker network automatically。一旦该网络存在,Docker将提供自己的DNS系统,以便容器可以通过名称或网络别名相互访问; Compose将每个服务以其名称注册到YAML文件中,因此在这组容器中,webserver
和form
都是可解析的主机名。
(这的必然结果是,您通常不需要在YAML文件中完全包含networks:
块,并且显式指定container_name:
或手动设置容器没有太大好处。网络设置。)