使用 Docker Compose 升级镜像的正确姿势
很多人用 Docker Compose 部署应用后,想升级到最新版本时,第一反应是:
“我
docker-compose restart
了,为什么还是旧版本?”
其实这是对 Docker 镜像和容器机制的一个常见误区。今天就带你理清楚升级镜像的正确流程。
1. 镜像 vs 容器:一定要区分清楚
- 镜像 (Image):相当于应用的“安装包”,包含代码与环境。
- 容器 (Container):就是基于镜像运行起来的一个“实例”。
镜像更新,并不会自动让现有容器升级。
docker-compose restart
只是 重启容器,不会替换镜像。
2. 正确的升级流程
第一步:拉取新镜像
docker-compose pull
这一步会从远程仓库拉取 Compose 文件里配置的镜像标签(例如 :latest
或某个版本号)。
第二步:用新镜像重建容器
docker-compose up -d
Compose 会检测到镜像有更新,自动删除旧容器,用新镜像创建新的容器。
如果镜像没变,它就会直接复用现有容器。
第三步:验证
查看容器:
docker ps
查看日志确认版本:
docker logs -f <容器名>
3. 删除旧镜像(可选)
升级后旧镜像通常还在本地,可以手动清理:
# 删除未被容器使用的镜像
docker image prune -a
或者针对某个 tag:
docker rmi your-image:oldtag
4. 一键升级脚本
为了更省事,可以写一个小脚本 upgrade.sh
:
#!/bin/bash
cd /PATH/TO/compose
docker-compose pull
docker-compose up -d
docker image prune -f
赋予执行权限:
chmod +x upgrade.sh
以后执行:
./upgrade.sh
就能完成升级。
5. 常见问题
Q: 为什么拉取时提示 Image is up to date
?
👉 说明远程仓库里该 tag 的内容和你本地一致,没有更新。
Q: 如何确认镜像确实更新?
👉 可以对比 Digest:
docker images --digests
docker manifest inspect your-image:tag | grep digest
如果 Digest 一致,说明内容没变。
总结
docker-compose restart
≠ 升级镜像,只是重启容器。- 正确方式:
docker-compose pull && docker-compose up -d
- 定期清理旧镜像,保持磁盘干净。
- 想自动化升级,可以用脚本一键完成。