docker镜像版本回滚是停用当前容器并启动指定旧版镜像的新容器;需确保历史镜像存在、使用语义化版本标签、保持启动参数一致,并推荐通过compose或脚本实现标准化操作。

确认旧版镜像是否就绪
回滚前先检查本地是否有对应版本镜像:
- 运行
docker images | grep your-app-name,确认存在如myapp:v1.9.3这类带语义化版本号的镜像 - 若缺失,执行
docker pull myapp:v1.9.3(需确保该 tag 在远程仓库中真实存在) - 避免依赖
latest标签——它可能被覆盖,无法追溯,生产环境务必使用明确版本号
手动停旧启新(适用于单容器)
以当前运行 myweb:v2.1.0、需回退至 myweb:v1.9.3 为例:
-
docker stop myweb—— 停止正在运行的容器 -
docker rm myweb—— 删除容器(若挂载了外部卷或配置,可跳过;但重启时需确保端口不冲突) -
docker run -d --name myweb -p 80:80 --restart unless-stopped myweb:v1.9.3—— 按原参数启动旧镜像 - 验证:用
curl -I http://localhost检查响应,或docker logs -n 10 myweb查看关键日志
用 Docker Compose 快速回滚(推荐)
如果服务由 docker-compose.yml 管理,只需改一行再重部署:
- 编辑文件,将
image: myweb:v2.1.0改为image: myweb:v1.9.3 - 执行
docker compose down && docker compose up -d - Compose 会自动复用原有网络、卷、重启策略等配置,比手动操作更可靠、不易遗漏参数
让回滚真正“快速”的日常准备
回滚快慢,取决于平时是否做了这些事:
- 每次构建都打带语义化版本号的 tag(如
v1.9.3),并推送到私有或公共 registry - 对关键版本做离线备份:
docker save -o backup_v1.9.3.tar myweb:v1.9.3 - 记录每次上线镜像的 SHA256 digest(
docker images --digests),防止 tag 被覆盖后误判 - 封装脚本(如
./rollback.sh v1.9.3),内置停、删、拉、启、验全流程,减少人为失误











