如何确定失败的 docker 构建中最后成功的层

koj*_*iro 10 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
Run Code Online (Sandbox Code Playgroud)

如果该步骤失败,中间图像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
Run Code Online (Sandbox Code Playgroud)

我在输出中没有看到任何docker build --help似乎可以提供更多可调试性的内容。docker build不接受--debug--verbose标记。

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

Sha*_*ail 5

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

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

DOCKER_BUILDKIT=0 docker build -t sometag .

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

有关 docker 文档的更多信息,

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