Docker部署Django时无法读取新邮箱配置问题求助
检查镜像构建是否包含最新配置
如果你修改了本地的settings.py但Docker容器里还是旧配置,大概率是镜像缓存搞的鬼。重新构建镜像时跳过缓存:docker compose build --no-cache docker compose up -d同时确认你的Dockerfile里有正确复制项目文件的命令,比如
COPY . /app(假设项目根目录在/app下),别漏了复制settings文件。排查卷挂载与.dockerignore问题
如果docker-compose.yml里用了本地目录挂载(比如./:/app),先检查本地的settings.py确实是修改后的版本。另外看一下项目根目录的.dockerignore文件,有没有把settings.py或者配置文件夹写进去——要是被忽略了,构建镜像时就不会把新配置打包进去,挂载又出问题的话就会用旧配置。核对环境变量配置
很多Django项目会用环境变量覆盖代码里的配置,比如EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER这些。检查:- docker-compose.yml里的
environment块,有没有硬编码旧的邮箱配置; - 项目根目录的
.env文件,里面的邮箱相关变量是不是没更新; - settings.py里的配置逻辑,比如是不是写了
EMAIL_HOST = os.getenv('EMAIL_HOST', '旧地址')——这种情况如果Docker里没设置对应环境变量,就会用默认的旧值,要么改默认值,要么在Docker里设置正确的环境变量。
- docker-compose.yml里的
确认Docker使用的Settings模块
有些项目会分开发、生产环境的settings文件,比如settings/dev.py和settings/production.py。检查docker-compose.yml里有没有设置DJANGO_SETTINGS_MODULE环境变量,比如:environment: - DJANGO_SETTINGS_MODULE=myproject.settings.production如果是这样,你改的是dev.py里的配置就没用,得去对应的production.py里更新邮箱设置。
进入容器验证配置
实在找不到问题,就直接进容器看真实的配置文件:docker exec -it <你的容器名称> bash cat /app/myproject/settings.py # 换成你自己的settings路径如果文件内容是旧的,说明镜像构建或挂载有问题;如果是新的,那可能是Django缓存或者其他地方的配置冲突,可以试试在容器里运行
python manage.py shell,手动打印邮箱配置:from django.conf import settings print(settings.EMAIL_HOST)看输出是不是新配置,再针对性排查。
内容的提问来源于stack exchange,提问作者David Amugune

