编辑:我需要在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 /登录,但那里没有侦听器,因此连接被拒绝。