You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django/Docker预发布环境模型更新后migrate未检测未生效问题排查求助

问题根源

你在docker-compose-preprod.yml中配置了命名卷app_volume挂载到容器的/usr/src/app目录,该卷中存储的是首次运行容器时生成的旧版本代码。每次容器启动时,卷内的旧代码会覆盖你新构建镜像中已更新的代码,因此无论你怎么重新构建镜像、重启容器,容器内实际运行的还是旧版本代码,自然检测不到模型变更。

验证方法

你可以执行docker exec -it virage_web cat /usr/src/app/[你修改的模型文件路径],对比输出内容和服务器上拉取的最新代码,会发现容器内的文件还是旧版本。

解决方案

临时修复步骤

  1. 停止所有关联容器,单独删除旧的app_volume(注意不要删除static_volume和media_volume,避免丢失静态资源和用户上传的媒体文件)
docker-compose -f docker-compose-preprod.yml down
docker volume rm [你的项目前缀]_app_volume
# 项目前缀默认是docker-compose文件所在的目录名,你可以通过docker volume ls查看具体的卷名
  1. 重新构建镜像并启动容器
docker-compose -f docker-compose-preprod.yml build
docker-compose -f docker-compose-preprod.yml up -d

永久优化方案

  • 移除docker-compose-preprod.yml中所有服务下app_volume的挂载配置,预发布/生产环境不需要通过卷挂载代码,镜像内已经包含了完整的可运行代码,该挂载只会导致代码被旧卷覆盖的问题。
  • 不要在预发布/生产环境执行makemigrations命令:该操作应该在本地开发阶段完成,生成的迁移文件要提交到Git仓库,服务器上的entrypoint.preprod.sh只需要保留migrate命令即可,避免服务器生成的迁移文件和本地不一致引发后续问题。
  • 额外检查:确认修改了模型的应用已经添加到Django配置的INSTALLED_APPS列表中,未加入列表的应用Django不会检测其模型变更。

内容的提问来源于stack exchange,提问作者Mereva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:06:03