You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose多阶段构建生成重复镜像,原因及解决方法是什么?

解决方案

1. 自动清理构建过程中的中间镜像

多阶段构建默认会留存build阶段的未打标签中间镜像,你可以在构建命令中加--rm参数自动删除这类镜像:

docker-compose build --rm client

该参数默认是开启状态,若之前有缓存异常可以手动指定生效。

2. 构建后主动清理悬空镜像

每次构建完成后执行一次悬空镜像清理命令,该命令只会删除无标签、且未被任何容器引用的冗余镜像,不会影响正在运行的服务:

docker image prune -f

你也可以把构建命令和清理命令拼成一行,每次构建完自动执行清理:

docker-compose up --build -d && docker image prune -f

3. 避免旧生产镜像变成悬空镜像(可选)

如果不想每次构建后旧版本镜像变成状态,可以给每次构建的镜像设置唯一标签,比如用代码commit哈希、构建时间作为标签,不要每次都用latest标签覆盖旧版本:
在docker-compose.yml的client服务下新增image字段指定标签规则即可:

services:
  client:
    build: ./client
    image: your-app-client:${BUILD_TAG:-latest} # 支持传入环境变量指定标签,默认用latest
    ports:
      - "8080:80"
    # 注意:生产环境建议删除以下volumes配置,本地挂载会覆盖容器内的构建结果,该配置仅适用于开发环境
    volumes:
      - "./client:/app"
      - "/app/node_modules"

补充说明

你看到的333MB的镜像就是Node构建阶段的中间镜像,23.6MB的是上一次构建生成的Nginx生产镜像,因为新构建的镜像占用了latest标签,旧镜像就变成了无标签的悬空镜像,用prune命令清理是成本最低的通用方案。

内容的提问来源于stack exchange,提问作者Mòe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:09:01