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

时间:2019-01-10 05:01:48

标签: docker nginx docker-compose reverse-proxy

我有一个与此类似的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的{​​{1}}:

nginx

现在发生的事情是,当我运行# ... services: reverse-proxy: # ... ports: - 5500:80 networks: - my-net networks: my-net: external: name: my-net my-ui(每个都使用自己的reverse-proxy),然后转到docker-compose up时,我得到了{{1 }}消息,而我的http://localhost:5500日志说:

Bad Gateway

如果我nginx到我的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

nginx

两者都成功,但是如果我想使用ping

ping my-ui
ping 172.19.0.5

它们全部失败,并显示curl消息。我在这里想念什么?

PS:我不确定,但是添加curl -L http://my-ui curl -L http://my-ui:5402 curl -L http://172.19.0.1 是基本的connection refused应用程序并在Webpack开发服务器上运行可能会有用。

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

1 个答案:

答案 0 :(得分:1)

容器的名称(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