Flask开发服务器拒绝了nginx proxy_pass连接

时间:2019-02-13 23:01:32

标签: docker nginx flask docker-compose

编辑:我需要在app.run中将主机指定为0.0.0.0,这解决了我的问题。

我有一个要尝试使用docker和docker-compose的网络应用程序。后端是长颈瓶api,前端是个反应,nginx充当反向代理,每个块都在自己的容器中运行。我仍在开发它,因此我试图使用flask开发服务器来托管flask应用程序,并使用节点来托管react应用,并且flask容器在端口5000上提供服务,而节点在3000端口上提供服务,例如非常标准。

使用docker-compose -f docker-compose-dev.yml up --build成功构建,并且每个容器都启动。我可以在浏览器中打开localhost,这会很好地加载react应用。但是,当我尝试登录时,我收到一个严重的网关错误,这是从我完成的搜索得出的,这意味着nginx找不到期望的监听器。

我尝试更改/api位置中的proxy_pass值,但这没有用。我需要手动指定IP吗?我尝试更改flask-api文件的docker-compose部分中的端口。但这也不起作用。

我要去哪里错了?

这是我的nginx配置:

server {

  listen 80;

  location / {
    proxy_pass http://client:3000;
    proxy_redirect    default;
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Host $server_name;
  }

  location /api {
    proxy_pass        http://flask-api:5000;
    proxy_redirect    default;
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Host $server_name;
  }

}

这是撰写文件:

version: '3'
services:

  flask-api:
    image: flask-translate
    build:
      context: ./flask_back_end/
      dockerfile: Dockerfile-dev
    volumes:
      - "./flask_back_end/:/app"
    ports:
      - 5000:5000

  client:
    image: react-translate
    build:
      context: ./react-app/
      dockerfile: Dockerfile-dev
    ports:
      - 3000:3000
    depends_on:
      - flask-api
    volumes:
      - './env.json:/usr/src/app/src/env.json'

  nginx:
    image: nginx-translate
    build:
      context: ./nginx/
      dockerfile: Dockerfile-dev
    ports:
      - 80:80
    depends_on:
      - flask-api
      - client

当我启动容器时,flask服务器让我知道它正在http://127.0.0.1:5000/上运行

如果我尝试登录nginx会吐出错误

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: , request: "POST /api/user/login HTTP/1.1", upstream: "http://172.18.0.2:5000/api/user/login", host: "localhost", referrer: "http://localhost/"

不是将连接转发到Flask开发API服务器的预期操作。

从此错误消息中,我认为客户端(哪个是172.18.01)正在将发布请求发送到localhost / api / user / login,该尝试将其转发到172.18.02:5000 / api / user /登录,但那里没有侦听器,因此连接被拒绝。

0 个答案:

没有答案