我有一个使用Flask作为后端的React应用。我正在尝试将React应用程序从Nginx服务器提供服务。 Nginx和Flask服务器都在docker容器中。静态内容可以正常工作,但是当站点尝试将呼叫代理到Flask服务器时,连接将被拒绝。
我在Flask服务器上看不到任何日志,因此我认为请求没有进入Flask容器。我尝试过更改代理以打不同的端口并遇到相同的问题。不应该允许容器彼此通信,还是必须显式允许某些端口打开?它们之间是否需要WSGI服务器?
Nginx default.conf
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/"
答案 0 :(得分:3)
Flask之类的声音正在监听127.0.0.1,这意味着“本地计算机”。每个容器都有自己的127.0.0.1,因此nginx正在连接到其容器127.0.0.1,这与Flask正在监听的容器不同。
解决方案是让Flask监听0.0.0.0。
有关更多详细信息,请参见https://pythonspeed.com/articles/docker-connection-refused/。