为什么我的Nginx代理成功找到我的节点Web服务器,因为我的docker-compose没有公开网络上的任何Web服务器端口?

时间:2018-09-23 10:47:39

标签: docker nginx

我的节点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流程。有人请向我们解释这里会发生什么?

1 个答案:

答案 0 :(得分:2)

更多最新版本的Docker Compose create a Docker network automatically。一旦该网络存在,Docker将提供自己的DNS系统,以便容器可以通过名称或网络别名相互访问; Compose将每个服务以其名称注册到YAML文件中,因此在这组容器中,webserverform都是可解析的主机名。

(这的必然结果是,您通常不需要在YAML文件中完全包含networks:块,并且显式指定container_name:或手动设置容器没有太大好处。网络设置。)