Docker Compose 容器升级步骤
使用 Docker Compose 管理的容器如何安全升级到最新版本。
#type / howto
#status / evergreen
#tech / ops / docker
Docker Compose 容器升级步骤
[!info] related notes Docker MOC 镜像更新未生效排查 Vaultwarden prelogin 404 故障
核心概念
Docker 容器不会自动升级。即使你的 compose.yaml 写的是 image: xxx:latest,容器一旦创建就不会因为远端有新镜像而自动更新。
升级的本质是:拉取新镜像 → 删除旧容器 → 用新镜像重建容器。
数据通过 volume 挂载持久化,所以重建容器不会丢数据。
标准升级流程
1. 确认当前版本
升级前先记录当前版本,方便对比和回滚:
docker exec <容器名> <程序> --version
# 例如:docker exec vaultwarden /vaultwarden --version
2. 备份数据
这是最重要的一步。 找到数据目录后备份:
# 查看挂载路径
docker inspect <容器名> --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
# 备份
sudo tar czf ~/<容器名>-backup-$(date +%F-%H%M).tar.gz <数据目录>
3. 拉取最新镜像
cd /opt/docker # 进入 compose.yaml 所在目录
docker compose pull <服务名>
如果 pull 所有服务:docker compose pull(不带服务名)。
4. 重建容器
docker compose up -d <服务名>
Docker Compose 会自动检测到镜像已更新,执行 Recreate。
5. 验证
# 确认新版本
docker exec <容器名> <程序> --version
# 查看日志是否正常
docker logs -f <容器名>
快速命令汇总
cd /opt/docker
docker compose pull <服务名>
docker compose up -d <服务名>
docker logs -f <服务名>
四条命令完成升级。
常见问题
compose.yaml 里写死了版本号
如果 image 写的是 vaultwarden/server:1.35.4 而不是 latest,需要先改成 latest 或新版本号,再 pull:
# 改前
image: vaultwarden/server:1.35.4
# 改后(二选一)
image: vaultwarden/server:latest
image: vaultwarden/server:1.36.0
升级后功能异常
检查是否需要同时更新环境变量。例如 Vaultwarden 升级后需要配置 DOMAIN 环境变量:
environment:
- DOMAIN: "https://your-domain.com"
修改 compose.yaml 后同样用 docker compose up -d 重建即可。
想回滚到旧版本
如果升级出问题,改回旧版本号再重建:
image: vaultwarden/server:1.35.4
docker compose up -d <服务名>
数据从备份恢复:
sudo tar xzf ~/xxx-backup-xxx.tar.gz -C /
实际案例:Vaultwarden 升级
2026-06-17 升级 Vaultwarden 从 1.35.2 → 1.36.0:
# 确认版本:Vaultwarden 1.35.2
docker exec vaultwarden /vaultwarden --version
# 备份
sudo tar czf ~/vaultwarden-data-backup-2026-06-17.tar.gz /opt/docker/vaultwarden/data
# 升级
cd /opt/docker
docker compose pull vaultwarden
docker compose up -d vaultwarden
# 确认版本:Vaultwarden 1.36.0
docker exec vaultwarden /vaultwarden --version
升级后浏览器扩展需要移除账户并重新登录,旧的 token 会因 DOMAIN 变更而失效。