docker-compose更新镜像注意点
1.只修改 docker-compose.yml 中的 image 地址
例如:
1 | services: |
然后执行:
1 | docker-compose up -d |
行为说明:
Compose 会检测
image标签是否变化(例如从myapp:v1→myapp:v2)。如果版本号或镜像名不同,它会:
- 拉取新的镜像;
- 停止并删除旧容器;
- 重新创建并启动新容器;
新的镜像会生效。
2.如果镜像名相同(例如都叫 myapp:latest)
即使你更新了远端镜像内容,但 docker-compose.yml 里没改 tag:
1 | image: myapp:latest |
然后执行:
1 | docker-compose up -d |
默认不会自动拉取新镜像,因为 Compose 认为本地已有该 tag。
结果:
- 不会拉取远端新镜像;
- 容器继续使用旧镜像;
新的 image 不会生效。
2.1解决方式
若要确保新镜像生效,有以下几种正确姿势:
方法 1:手动拉取
1 | docker-compose pull |
会强制拉取
docker-compose.yml中定义的所有镜像,然后重启对应容器。
方法 2:强制重建
1 | docker-compose up -d --force-recreate |
即使镜像没变化,也会销毁旧容器并重新创建。
方法 3:同时拉取 + 重建(最彻底)
1 | docker-compose pull && docker-compose up -d --force-recreate |
3.总结
| 情况 | 命令 | 是否生效 |
|---|---|---|
| 修改了 image 名或 tag | docker-compose up -d |
✅ 会生效 |
| image 名相同、tag 相同但镜像已更新 | docker-compose up -d |
❌ 不会生效 |
| 要拉取新镜像并重建容器 | docker-compose pull && docker-compose up -d |
✅ 推荐 |
| 强制重建容器(即使镜像没变) | docker-compose up -d --force-recreate |
✅ 可确保变更应用 |