macOS下docker-compose管理的Django容器代码修改不生效问题
解决方案
- 优先修正挂载路径错误(核心问题)
你Dockerfile中COPY service_api /opt/service_api是将本地service_api目录下的应用代码直接存入容器的/opt/service_api路径,但你compose中配置的挂载是把本地service_api目录挂载到容器的/opt/service_api/service_api子目录下,相当于代码嵌套了一层,Django启动时默认加载的是镜像构建时写入的/opt/service_api下的旧代码,根本不会读取你挂载到子目录的新代码。
修改docker-compose.yml的volumes配置为:
volumes: - ./service_api/:/opt/service_api
- 修复Mac端Docker文件同步bug
你使用的Docker Desktop 3.5.0 + macOS Big Sur 11.4版本存在gRPC FUSE驱动的文件同步已知问题,操作如下:
- 打开Docker Desktop偏好设置 -> 通用选项卡
- 取消勾选「Use gRPC FUSE for file sharing」,切换为osxfs驱动
- 重启Docker生效
- 清理旧缓存重新启动服务
执行以下命令清理旧容器、缓存镜像,重新启动:
docker-compose down -v docker-compose up --build
- 验证配置有效性
启动服务后进入容器确认文件同步状态:
docker exec -it service-django bash # 进入代码目录查看修改后的文件内容是否和本地一致 cat /opt/service_api/你修改的文件路径
同时确认Django的settings.py中DEBUG = True,且启动命令没有加--noreload参数,保证自动重载功能正常生效。
内容的提问来源于stack exchange,提问作者evgenyorlov1
相关产品推荐
相关产品推荐

