部署多容器Django至AWS EB后静态文件丢失及网关错误排查求助
问题诊断与修复方案
问题1:Admin面板无样式(静态文件加载失败)
核心原因
Nginx代理容器未挂载存储静态文件的web卷,导致Nginx无法访问Django通过collectstatic收集的静态资源。
修复操作
修改Dockerrun.aws.json,给nginx-proxy容器添加mountPoints配置,将web卷挂载到Nginx容器的/static目录:
{ "AWSEBDockerrunVersion": "2", "containerDefinitions": [ // web容器配置保持不变 { "essential": true, "image": "${AWS_ACOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_NAME}:${IMAGE_TAG}", "mountPoints": [ { "containerPath": "/code/static", "sourceVolume": "web" } ], "name": "web", "hostname": "web", "memoryReservation": 1200, "portMappings": [ { "containerPort": 8000, "hostPort": 8000 } ] }, // 修改nginx-proxy容器,添加web卷挂载 { "name": "nginx-proxy", "image": "nginx", "essential": true, "memoryReservation": 128, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/nginx.conf" }, { "sourceVolume": "web", "containerPath": "/static" } ], "links": ["web"] } ], "volumes": [ { "name": "web" }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/nginx.conf" } } ] }
问题2:登录时出现504/502网关错误
原因1:Entrypoint脚本存在无效命令
你的entrypoint.sh中使用yum install realmd,但Docker镜像基于Debian系的python:3.10,不支持yum包管理器,这会导致脚本执行报错,延迟甚至阻塞Gunicorn启动。且Dockerfile中已安装过realmd,无需重复操作。
修复操作
修改entrypoint.sh,删除无效的yum命令:
#!/bin/bash python manage.py migrate --noinput >/tmp/migrate 2>/tmp/migrate_err python manage.py collectstatic --no-input # 移除下方无效命令 # yum install realmd gunicorn \ --bind 0.0.0.0:8000 \ pos.wsgi:application
原因2:数据库连接异常
登录请求需要访问RDS数据库,若网络配置或数据库响应异常会导致Nginx超时:
- 检查RDS安全组:确保允许EB环境的EC2安全组访问RDS的数据库端口(默认5432/3306)。
- 验证数据库配置:在EC2容器内用
psql/mysql命令测试RDS连接,确认settings.py中的主机、端口、账号密码正确。
原因3:容器资源不足
t3.small实例内存为2GB,web容器memoryReservation设为1200MB,若migrate/collectstatic过程占用过多资源,会导致Gunicorn启动延迟:
- 临时降低
memoryReservation值(如设为1000MB),预留更多内存给系统进程;或升级实例规格至t3.medium。
验证步骤
- 部署修改后,查看容器日志确认无启动报错:
# 查看web容器日志 docker logs web # 查看nginx容器日志 docker logs nginx-proxy - 进入nginx容器验证静态文件挂载:
若能看到css、js等目录,说明静态文件挂载成功。docker exec -it nginx-proxy ls /static/admin
内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan
相关产品推荐
相关产品推荐

