Docker构建失败:如何通过SHA256哈希运行对应镜像?
解决Docker BuildKit构建失败后获取中间镜像的问题
一、验证BuildKit是否启用
- 检查会话级启用状态:执行
echo $DOCKER_BUILDKIT,输出为1则当前会话已启用BuildKit - 查看全局配置:执行
cat /etc/docker/daemon.json,若包含"features": { "buildkit": true }则Docker daemon全局启用BuildKit - 确认Buildx版本:执行
docker buildx version,输出中带有buildkit字样则说明BuildKit已启用
二、获取构建失败前的中间镜像
BuildKit默认不会将构建过程中的中间镜像导入本地镜像库,需调整构建参数来保留这些镜像:
方法1:重新构建时导出中间镜像到本地
执行构建命令时添加--output=type=docker参数,BuildKit会将所有成功阶段的镜像导入本地Docker镜像列表:
docker build --build-arg env=development . --progress=plain --output=type=docker
构建失败后:
- 执行
docker images查看最近创建的镜像,定位失败前最后一个成功构建的镜像 - 直接使用构建输出中成功步骤对应的SHA256哈希运行容器:
docker run -it <成功步骤的sha256哈希> /bin/bash
方法2:指定构建到失败前的阶段
如果Dockerfile使用多阶段构建,或能明确失败前的阶段,可通过--target参数指定构建到该阶段,直接生成可运行镜像:
docker build --build-arg env=development . --progress=plain --output=type=docker --target=<失败前的阶段名>
之后即可用生成的镜像执行docker run命令。
三、保留BuildKit的注意事项
上述方法均基于BuildKit构建,不会禁用BuildKit功能。若需长期保留中间镜像缓存,可添加--cache-from参数指定缓存源,日常调试使用--output=type=docker已足够满足需求。
内容的提问来源于stack exchange,提问作者mpen
相关产品推荐
相关产品推荐

