出现这种情况通常是因为现有容器还指向旧镜像,或项目里还保留着旧的自动命名镜像(例如 <project>_frontend)。docker compose images 会按项目中现有容器来列出镜像,所以仅改了 image:build,但没有用新镜像重建容器时,会一直看到旧名字。

一步到位的做法

# 1) 停并删掉旧容器(避免占用旧镜像)
docker compose down

# 2) 重新构建(可选:加 --no-cache / --pull)
docker compose build frontend
# 或:docker compose build --no-cache --pull frontend

# 3) 用新镜像重建并启动容器
docker compose up -d frontend

# 4) 查看结果(现在应显示新 image 名)
docker compose images

不想 down 全部服务?只重建 frontend

# 强制用新镜像重建 frontend 容器
docker compose up -d --build --force-recreate frontend
docker compose images

清理旧的匿名/自动命名镜像(可选)

如果之前没写 image:,Compose 会生成 <project>_frontend 这样的镜像名;改了 image: 后旧镜像还会留在本地,你可以手动清理:

docker image ls | grep frontend
docker image rm <old-image-id-or-name>   # 若未被容器占用
# 或清理悬挂层
docker image prune -f

常见踩坑速查

  • 只执行了 docker compose build但没执行 up 重建容器 → 仍显示旧镜像名。

  • 修改了 image: 在某个覆盖文件里(如 docker-compose.override.yml),运行时未带上该文件

    docker compose -f docker-compose.yml -f docker-compose.override.yml up -d --build
    
  • 同一项目名下存在旧容器(即便是停止状态)docker compose images 仍可能显示对应旧镜像 → 先 rm/down 再重建。

按上面步骤做完,再跑一次 docker compose imagesdocker images | grep frontend,就能同时确认服务引用和本地镜像列表都已经是新名称了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐