docker 更新 方法
1. 标准更新流程(推荐)※#
这是最常用、最安全的方法。在包含 docker-compose.yml 文件的目录下执行:
- 拉取最新镜像:
docker-compose pull这会将配置文件中指定的镜像(如latest标签或特定版本)下载到本地,但此时容器仍在运行旧版本。 - 启动并重建容器:
docker-compose up -dDocker Compose 会自动对比本地镜像 ID 和容器正在使用的镜像 ID。如果发现镜像已更新,它会自动停止、删除并重新创建受影响的容器。 - 清理旧镜像(可选):
docker image prune更新后,旧的镜像会变成“悬空”状态(dangling),占用磁盘空间。执行此命令可以释放空间。
2. 更新特定服务※#
如果你只想更新项目中的某一个服务(例如只想更新 nginx 而保持 db 不动),可以在命令后指定服务名称:
docker-compose pull <服务名>
docker-compose up -d --no-deps <服务名>Bash
docker-compose pull <服务名>
docker-compose up -d --no-deps <服务名>
--no-deps参数确保不会同时重启该服务所依赖的其他服务。
3. 强制重新创建(即使配置没变)※#
有时候修改了环境变量或容器外部的某些东西,但镜像没变,Compose 认为不需要更新。此时可以强制重建:
docker-compose up -d --force-recreate4. 常见问题与注意事项※#
| 注意事项 | 说明 |
|---|---|
| 数据持久化 | 确保你的数据存储在 volumes 中。如果数据在容器内部,更新容器时数据会丢失。 |
| 镜像标签 | 如果你在 yml 中指定了版本号(如 mysql:8.0.20),单纯执行 pull 不会升级到 8.0.21。你需要修改 yml 文件中的版本号后再执行 up -d。 |
| 网络中断 | up -d 过程中容器会重启,通常会有几秒钟的服务中断。 |
Bash
docker-compose up -d --force-recreate