如何让Ubuntu上Docker多阶段构建的缓存行为与Windows保持一致
差异原因
两个环境构建行为不同的核心原因是默认使用的构建引擎不同:
- Windows Docker Desktop默认启用了BuildKit(Docker新一代构建引擎),内置依赖链路分析能力,构建时只会执行最终目标依赖的阶段,自动跳过无关的冗余步骤
- Ubuntu 20.10及更早版本的Docker Engine默认使用传统Legacy构建引擎,会按Dockerfile的书写顺序逐行执行所有阶段,不会主动跳过目标不需要的步骤
配置方案
单次临时启用
执行构建命令前注入环境变量即可,无需修改全局配置:
DOCKER_BUILDKIT=1 docker build .
指定target构建的命令示例:
DOCKER_BUILDKIT=1 docker build --target step2 .
执行后即可获得和Windows环境一致的构建输出与缓存优化效果。
全局永久启用
- 编辑Docker daemon配置文件
/etc/docker/daemon.json,添加如下配置:
{ "features": { "buildkit": true } }
- 重启Docker服务使配置生效:
sudo systemctl restart docker
配置完成后所有docker build操作默认使用BuildKit引擎,和Windows Docker Desktop的构建行为完全一致。
补充说明
BuildKit从Docker 18.09版本开始就已正式稳定,Docker 23.0及之后版本已经将其设为默认构建引擎,无需额外配置。启用后除了自动跳过无关阶段,还能带来并行构建、缓存效率提升、镜像体积优化等额外收益,生产环境也推荐开启。
内容的提问来源于stack exchange,提问作者tr_
相关产品推荐
相关产品推荐

