解决 Docker-compose 中 Nginx 无法正常代理 Gunicorn
使用 Docker-compose.yml 用 command 启动 Gunicorn,同时启动 Nginx,但是 Gunicorn 的地址无法被 Nginx 正常代理
问题例子
Docker-compose.yml
version: "3"
services:
app:
build: ./app
command: gunicorn -w 4 -b :5000 server:app
expose:
- 5000
nginx:
build: ./nginx
ports:
- 80:80
links:
- app
nginx.conf
server {
listen 80;
server_name _;
location / {
proxy_pass http://app:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
解决方法
- 不使用 Docker-compose 中的 command,使用 Gunicorn 的 Configuration File[1] 来配置 Gunicorn
- 创建一个任意名称(例如:
gunicorn_config.py
)的 Python 文件放到主程序server.py
(名称以你情况而定),也就是 Gunicorn 需要启动 Python 程序的同一目录下 - 更改 Docker-compose 的 command 为
gunicorn --config=gunicorn_config.py master:app
gunicorn_config.py 例子
bind = "0.0.0.0:5000"
workers = "4"