docker-compose更新镜像注意点

1.只修改 docker-compose.yml 中的 image 地址

例如:

1
2
3
services:
web:
image: myapp:v2

然后执行:

1
docker-compose up -d

行为说明:

  • Compose 会检测 image 标签是否变化(例如从 myapp:v1myapp:v2)。

  • 如果版本号或镜像名不同,它会:

    1. 拉取新的镜像;
    2. 停止并删除旧容器;
    3. 重新创建并启动新容器;

新的镜像会生效。


2.如果镜像名相同(例如都叫 myapp:latest

即使你更新了远端镜像内容,但 docker-compose.yml 里没改 tag:

1
image: myapp:latest

然后执行:

1
docker-compose up -d

默认不会自动拉取新镜像,因为 Compose 认为本地已有该 tag。
结果:

  • 不会拉取远端新镜像;
  • 容器继续使用旧镜像;

新的 image 不会生效。


2.1解决方式

若要确保新镜像生效,有以下几种正确姿势:

方法 1:手动拉取

1
2
docker-compose pull
docker-compose up -d

会强制拉取 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 ✅ 可确保变更应用