修改serve.py后Docker不生效?如何让Docker运行最新代码?
Docker代码变更生效问题解答
现有操作无效的原因
你当前的Docker Compose配置仅挂载了.cachedir目录,serve.py属于foo/bar镜像内置文件,修改宿主机的serve.py不会同步到镜像内部。你执行的容器重启、up --force-recreate命令都只是基于原有旧镜像重新创建容器,镜像本身没有更新,因此容器内的serve.py始终为旧版本。
是否必须重建镜像
如果保持现有配置不变,是必须重建镜像的,操作步骤如下:
- 先执行
docker-compose build命令重新构建镜像,将修改后的serve.py打包到新镜像中 - 再执行
docker-compose up -d启动容器,新容器会加载新镜像中的最新代码
更快的代码测试方案
方案1:挂载本地代码目录(开发场景推荐)
在Docker Compose的volumes配置中增加本地代码目录到容器工作目录的挂载规则,假设宿主机当前目录就是serve.py存放目录,容器内的工作目录为/app,修改后的配置如下:
container_name: foo image: foo/bar volumes: - ".cachedir:/cachedir" - "./:/app" # 请根据容器实际的代码存放路径调整右侧目标路径 env_file: - .env ports: - "50052:50052" restart: always entrypoint: ["python", "serve.py"] logging: options: max-size: "10m" max-file: "3"
配置更新后重启容器即可,后续修改宿主机代码会直接同步到容器内,不需要重建镜像;如果你的Python服务开启了热重载模式,甚至不需要重启容器就能生效。
方案2:直接复制文件到容器(临时测试用)
如果不想修改配置,可使用docker cp命令直接将宿主机修改后的文件复制到容器内,参考命令如下(请替换为容器内serve.py的实际存放路径):
docker cp ./serve.py foo:/app/serve.py
复制完成后重启容器即可生效,无需重建镜像。
内容的提问来源于stack exchange,提问作者jlos
相关产品推荐
相关产品推荐

