AWS上Docker部署的Django项目Git Pull后代码不生效求助
问题分析与解决方法
你的核心问题是:Django项目代码更新后未同步到运行的容器中,静态文件能更新是因为你配置了目录挂载,但Python代码并没有挂载到容器内,且容器基于旧镜像运行,所以新代码无法生效。以下是具体解决办法:
方法1:挂载项目代码到容器(适合快速迭代/测试场景)
修改docker-compose.yml中web服务的volumes配置,将本地项目目录挂载到容器内的代码工作目录(需与Dockerfile中的WORKDIR一致):
web: image: image_name build: . restart: always command: gunicorn project.wsgi:application --bind 0.0.0.0:8000 env_file: - envs/.env.prod ports: - "8000:8000" volumes: - ./staticfiles/:/tmp/project/staticfiles - .:/app # 新增:本地项目根目录挂载到容器工作目录,替换/app为你Dockerfile中WORKDIR设置的路径 depends_on: - postgres - redis
配置完成后,拉取Git代码后只需重启web容器即可生效:
docker-compose restart web
注意:生产环境不推荐此方式,可能引发依赖版本、文件权限等问题。
方法2:重新构建镜像并重启服务(生产环境推荐)
容器内的代码是打包在镜像中的,拉取Git更新后必须重新构建镜像,让新代码被打包进去,再重启服务:
# 重新构建web服务的镜像 docker-compose build web # 重新启动web服务(-d 参数表示后台运行) docker-compose up -d web
此方式能保证容器运行的代码与Git最新版本完全一致,符合生产环境的稳定性要求。
额外检查项
- 确认Git拉取后,本地项目目录确实是最新版本,无未合并的冲突或未拉取的文件
- 检查Dockerfile中是否包含
COPY . .(或类似复制项目代码的指令),确保构建镜像时能把本地代码复制进镜像 - 重启后可通过日志验证代码是否加载成功:
docker-compose logs web
内容的提问来源于stack exchange,提问作者Elena Konstantinova
相关产品推荐
相关产品推荐

