首页 > 解决方案 > 如何确定失败的 docker 构建中的最后一个成功层

问题描述

当在以前版本的 Docker 中构建失败时,我可以指望这样的输出:

 ---> 8f9941c285e2
Removing intermediate container 9a543227b6b8
Step 6/21 : RUN adduser -s /bin/sh -h /home/user -D user  && mkdir -p /whl  && chown -R user:user /srv /whl
 ---> Running in 93a90935664d
 ---> 7f700d063b68
Removing intermediate container 93a90935664d

如果该步骤失败,中间图像7f700d063b68仍然存在。我能docker run做到并试图弄清楚发生了什么。

但是现在,使用 docker client 20.10.2 我只得到这个输出:

 => [dev 1/3] COPY --from=build /whl /whl
    .1s
 => [dev 2/3] COPY --chown=user:user . .
    .9s
 => ERROR [dev 3/3] RUN python3 -m pip install --find-links /whl -e ".[bpython,test]" && command -v bpython
    .3s

我在docker build --help输出中看不到任何似乎在这里提供更多可调试性的东西。docker build不接受--debug--verbose标记。

我怎样才能发现最后一个成功的图像/层是什么,所以我可以输入它并使用上下文进行调试?

标签: docker

解决方案


我想你正在使用 BuildKit,如果变量DOCKER_VARIABLEDOCKER_BUILDKIT=1?那么您正在使用 Buildkit。

要使用以前使用的内容来查看构建的输出,然后设置,

DOCKER_BUILDKIT=0 docker build -t sometag .

与以前的构建器相比,BuildKit 提供了许多改进。

有关 docker 文档的更多信息,

https://docs.docker.com/develop/develop-images/build_enhancements/


推荐阅读