【发布时间】:2020-05-02 16:04:41
【问题描述】:
我有一个使用 Flask 作为后端的 React 应用程序。我正在尝试将 react 应用程序从 Nginx 服务器中提供服务。 Nginx 和 Flask 服务器都在 docker 容器中。静态内容工作正常,但是当站点尝试代理对烧瓶服务器的调用时,连接被拒绝。
我在 Flask 服务器上看不到任何日志,所以我认为请求没有进入 Flask 容器。我尝试更改代理以访问不同的端口并遇到相同的问题。不应该允许容器相互通信还是我必须明确允许某些端口打开?我需要它们之间的 WSGI 服务器吗?
Nginx 默认配置文件
server {
listen 80;
server_name localhost;
location / {
index index.html;
root /usr/share/nginx/html;
}
location /api/ {
proxy_pass http://flask:5000;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host "localhost";
}
}
docker-compose.yml
version: "3"
services:
nginx:
image: nginx
volumes:
- /home/cookery/Cookery/dining/build:/usr/share/nginx/html
- /home/cookery/Cookery/docker/docker.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
flask:
build: ../kitchen
ports:
- "5000:5000"
这是我对烧瓶服务器的请求时遇到的错误
2020/01/15 21:18:08 [error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.26.0.1, server: localhost, request: "GET /api/recipes/all HTTP/1.1", upstream: "http://172.26.0.2:5000/api/recipes/all", host: "localhost:8080", referrer: "http://localhost:8080/"
【问题讨论】:
-
你能发布错误日志吗?我想这可能是一个CORS问题。您也可以尝试在 location 之后添加 *~,例如 location *~ /api/ 以指出端点的所有路由。
-
Flask 服务器是否在监听 127.0.0.1?
-
@ItamarTurner-Trauring Flask 服务器确实说它已启动并正在监听 127.0.0.1:5000
-
@ShahedMehbub 添加 *~ 阻止它将请求转发到烧瓶服务器。我还认为它可能是 CORS,但我不确定如何测试我是否正确实施了 flask_cors。
-
您可以从浏览器检查 API 以查看是否是 CORS 问题。另外,您的 Dockerfile 是否包含“EXPOSE 5000”命令?
标签: docker nginx flask docker-compose