代码之家  ›  专栏  ›  技术社区  ›  gokan

Docker nginx proxy_pass-上游连接被拒绝

  •  0
  • gokan  · 技术社区  · 8 年前

    proxy_pass 仅适用于意外的IP值。

    当我使用 docker inspect 网关 172.29.0.1 ,我的 代理通行证 应该和 172.29.0.1条

    当前: 我必须使用 172.18.0.1 代理通行证 让它发挥作用 我不明白为什么这个随机值会起作用 . 如果我不使用 然后我有一个502 HTTP错误,我的docker日志显示” 上游连接被拒绝 ".

    我的 停靠文件 (仅包含一行):

    FROM nginx

    我的 docker合成 (我使用 docker-compse up --build

    version: '3'
    services:
      nginx-web:
        image: nginx-web
        container_name: nginx-web-container
        build: .
        ports:
         - "80:80"
        volumes:
         - ./volume-sources/nginx-conf-files:/etc/nginx/conf.d/
    

    我的 nginx文件 nginx-web 价值是 网关 价值是 ,但当手动设置为 ):

    upstream upstream-nginx-web {
        server nginx-web:8000;
    }
    
    server {
        listen 80;
        server_name my-site.com;
    
        access_log  /var/log/nginx/access.log;
        error_log   /var/log/nginx/error.log;
    
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://upstream-nginx-web;
        }
    }
    

    主办 ip route :

    default via 192.168.1.1 dev wlp2s0 
    10.0.0.0/8 via 10.110.23.254 dev enp0s31f6 
    10.110.20.0/22 dev enp0s31f6 proto kernel scope link src 10.110.20.76 metric 100 
    169.254.0.0/16 dev enp0s31f6 scope link metric 1000
    172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
    172.29.0.0/16 dev br-56b3c9a632cf proto kernel scope link src 172.29.0.1 linkdown 
    192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.101 metric 600
    

    奇怪的

    我重新启动了我的容器 docker-compose up --build --force-recreate --always-recreate-deps 网关 是 172.17.0.1 但是反向代理只有在 代理通行证 172.19.0.1 .

    笔记:

    • 我的Docker版本:18.06.1-ce
    • 我的操作系统:Ubuntu18.04LTS
    • host.docker.internal 和 gateway.host.internal 仅在Windows和Mac下可用,因此我使用 (在我的Nginx文件中)它是由 .

    1. 我的错误在哪里?

    谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   gokan    8 年前

    docker合成 在每次部署时自动创建新网络。 有可能 通过使用 network_mode: bridge 你的选择 docker合成 文件。使用此解决方案,您将使用Docker的默认网络( 卷宗0 ).

    如果你使用 网络模式:网桥 upstream 就像我在我最初的例子中所做的那样:

    upstream upstream-nginx-web {
      # "nginx-web" is NOT recognized if "network_mode: bridge"
      server nginx-web:8000;
    
      # Use your Docker Gateway (which can be 172.17.0.1)
      server 172.17.0.1:8000;
    }
    

    docker network inspect bridge --format="{{ (index .IPAM.Config 0).Gateway }}"
    

    结果:

    172.17.0.1