两天的工作,我仍然卡住了 . 我正在运行单独的nginx和应用程序容器 . 应用程序容器有一个烧瓶应用程序,它在端口8000上运行gunicorn进程 .
每次我导航到 localhost:8080
这是nginx端口80映射到localhost时,我得到一个加载屏幕和一个nginx 504错误 .
这是我在终端上看到的:
docker-compose.yml
version: '2'
services:
web:
restart: always
build: ./web_app
expose:
- "8000"
ports:
- "8000:8000"
volumes:
- ./web_app:/data/web
command: /usr/local/bin/gunicorn web_interface:app -w 4 -t 90 --log-level=info -b :8000 --reload
depends_on:
- postgres
nginx:
restart: always
build: ./nginx
ports:
- "8080:80"
volumes_from:
- web
depends_on:
- web
postgres:
restart: always
image: postgres:latest
volumes_from:
- data
volumes:
- ./postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- ./backups/postgresql:/backup
expose:
- "5432"
data:
restart: always
image: alpine
volumes:
- /var/lib/postgresql
tty: true
nginx.conf
server {
listen 80;
server_name localhost;
charset utf-8;
location /static/ {
alias /data/web/crm/web_interface;
}
location = /favicon.ico {
alias /data/web/crm/web_interface/static/favicon.ico;
}
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx Dockerfile
FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
COPY ./nginx.conf /etc/nginx/conf.d/nginx.conf
如果需要,我会提供更多信息,以便在我正在努力解决的这个问题上得到一些帮助 .
2 回答
NGINX响应504表示网关超时,因为NGINX无法连接后端服务器 . 因此,您可以在proxy_pass目录中找到问题 .
我猜NGINX无法解析
web
域名,有两个解决方案:地点 / {
}
上游网络{
}
地点 / {
}
好吧,经过三天的抨击,我从头开始重新开始 . 重建app容器并运行gunicorn .
从那里我能够确定gunicorn进程超时,因为数据库主机名不正确 . 失败不是通过我的应用程序返回错误,而是失败了 .
我通过链接postgres容器和Web容器来修复此问题 . 在我的代码中,我能够使用“postgres”(容器的名称)作为postgres主机名 .
检查外部主机的地址 .