nginx与其他容器如何通讯

代理的网址

上一章我们有提到default.conf要代理的容器网址问题,现在展开详细说1、启动要代理的容器(我以mvc项目为例)
跳转上一章:https://www.cnblogs.com/long-live/p/dn.html

1、查看docker网桥信息,看到mvc得到的ip为172.17.0.2/16

root@iZwz97sm51bf4kswvc7dbqZ:~# docker network inspect bridge

我们知道同一个服务器上同在bridge网桥下的容器是可以通过docker0的veth-pair相互通讯的

2、所以将nginx容器内修改为mvc容器ip即可,并且端口应该是mvc的容器内端口,因为现在是容器内相互通讯嘛

server {
    listen       80;
    listen  [::]:80;
    server_name  ilhg.heiiii021.top;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
       # root   /usr/share/nginx/html;
       # index  index.html index.htm;
       proxy_pass https://172.17.0.2:8086; # 修改此处
    }

3、浏览器查看成功

4、那么问题来了,为什么上篇博客写的是https://172.17.0.1:8001也行呢?原因很简单,因为172.17.0.1是docker0与服务器直接通讯ip,就相当于服务器的对外ip一半(因为服务器对外ip既可以被外界访问也可以在服务器内部访问所有端口,而172.17.0.1是内部的,不能被外界访问,所以只有服务器对外ip的一半功能。),再加上端口又是容器启动时服务器对外端口8001,这样一来,就相当于是从nginx容器内部去寻找服务器内部的8001端口,当然可以访问成功。只不过这就不是容器内相互访问的概念了!

server {
    listen       80;
    listen  [::]:80;
    server_name  ilhg.heiiii021.top;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
       # root   /usr/share/nginx/html;
       # index  index.html index.htm;
       proxy_pass https://172.17.0.1:8001;
    }

5、我们知道放在服务器上项目中的localhost就是指该服务器的对外ip,那我们测试将172.17.0.1改为localhost发现浏览器不能访问。所以说明放在服务器上的docker内某个容器的localhost绝不是服务器的对外ip,可能是它被分到的ip如172.17.0.x

posted @ 2023-01-29 20:34  long-livece  阅读(282)  评论(0编辑  收藏  举报