【发布时间】:2021-02-22 18:04:38
【问题描述】:
众所周知,您可以针对失败的构建过程运行 docker commit 以获取容器的快照以进行调试。容器 ID 来自 running in <ID> 文本。但是,在使用 Docker 的较新 BuildKit buildx 功能进行构建期间不会发出此文本。
我尝试在 Docker 构建命令上使用 --progress plain,但这并没有显示容器 ID。另外,我无法从吐出的图像层 ID(SHA 哈希)运行新容器。
BuildKit 输出示例
使用这个命令:
#1 [internal] load build definition from Dockerfile
#1 sha256:0e70418d547c3ccb20da7b100cf4f69564bddc416652e3e2b9b514e9a732b4aa
#1 transferring dockerfile: 32B done
#1 DONE 0.0s
#2 [internal] load .dockerignore
#2 sha256:396b2cfd81ff476a70ecda27bc5d781bd61c859b608537336f8092e155dd38bf
#2 transferring context: 34B done
#2 DONE 0.0s
#3 [internal] load metadata for docker.io/library/node:latest
#3 sha256:1c0b05b884068c98f7acad32e4f7fd374eba1122b4adcbb1de68aa72d5a6046f
#3 DONE 0.0s
#4 [1/4] FROM docker.io/library/node
#4 sha256:5045d46e15358f34ea7fff145af304a1fa3a317561e9c609f4ae17c0bd3359df
#4 DONE 0.0s
#5 [internal] load build context
#5 sha256:49d7a085caed3f75e779f05887e53e0bba96452e3a719963993002a3638cb8a3
#5 transferring context: 35.17kB 0.0s done
#5 DONE 0.1s
#6 [2/4] ADD [trevortest/*, /app/]
#6 sha256:6da32965a50f6e13322efb20007ff49fb0546e2ff55799163b3b00d034a62c57
#6 CACHED
问题:如何在每个步骤中获取构建过程的容器 ID,特别是在使用 Docker BuildKit 时?
【问题讨论】:
-
您的意思是将提交 ID 存储在管道的中间,以便在管道以错误结束时进行调试或检查?如果您的目标是能够选择使用 commit 命令创建的特定图像,无论如何,我有一个想法。
-
是的,完全是@JRichardsz。我想基本上使用成功构建的中间图像层之一来启动一个新容器并检查文件系统。
-
调试时不要使用buildkit?
-
@SoftwareEngineer 调试时如何关闭它?
标签: docker