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. 避免旧生产镜像变成悬空镜像(可选)
如果不想每次构建后旧版本镜像变成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的latest标签,旧镜像就变成了无标签的悬空镜像,用prune命令清理是成本最低的通用方案。
内容的提问来源于stack exchange,提问作者Mòe
相关产品推荐
相关产品推荐

