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

nginx反向代理上游在docker compose中失败,连接被拒绝消息

  •  0
  • Farzad  · 技术社区  · 7 年前

    我有一个 docker-compose.yaml

    # ...
    services:
      my-ui:
        # ...
        ports:
        - 5402:8080
      networks:
      - my-net
    
    networks:
      my-net:
        external:
          name: my-net
    

    而我正试图建立 nginx 作为具有此配置的反向代理:

    upstream client {
      server my-ui:5402;
    }
    
    server {
      listen 80;
    
      location / {
        proxy_pass http://client;
      }
    }
    

    这就是 docker-compose.yaml nginx :

    # ...
    services:
      reverse-proxy:
        # ...
        ports:
        - 5500:80
        networks:
        - my-net
    
    networks:
      my-net:
        external:
          name: my-net
    

    现在发生的是当我跑的时候 my-ui 和 reverse-proxy (每个都使用自己的 docker-compose up ),我去 http://localhost:5500 Bad Gateway 留言,还有我的 日志说:

    connect() failed (111: Connection refused) while connecting to 
    upstream, client: 172.19.0.1, server: , request: "GET / HTTP/1.1", 
    upstream: "http://172.19.0.5:5402/", host: "localhost:5500"
    

    如果我 exec 进入我的 容器与使用 ping :

    ping my-ui
    ping 172.19.0.5
    

    两者都很成功,但如果我想,比如, curl

    curl -L http://my-ui
    curl -L http://my-ui:5402
    curl -L http://172.19.0.1
    

    他们都以失败告终 connection refused 消息我错过了什么?

    我的用户界面 这是一个基本的问题 vuejs 应用程序,在Web包开发服务器上运行。

    PS2:我也尝试过传递主机头等,但结果相同

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mathias    7 年前

    容器的名称( my-ui )解析为容器的IP。因此,您必须在上游提供容器的端口,而不是映射到主机的端口。

    upstream client {
      server my-ui:8080;
    }
    
    server {
      listen 80;
    
      location / {
        proxy_pass http://client;
      }
    }
    

    您还可以使用主机名配置上游,并使用映射端口。( server <name of host>:5402 )但这可能会变得相当混乱,并且您将失去使用docker网络隔离服务的优势。

    此外,您还可以删除端口映射,除非您需要在不使用反向代理的情况下访问Web服务:

    # ...
    services:
      reverse-proxy:
        # ...
        # ports:
        # - 5500:80