- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
众所周知,您可以运行docker commit
针对失败的构建过程拍摄容器快照以进行调试。容器 ID 来自 running in <ID>
文本。但是,在 Docker 较新的 BuildKit buildx
发生的构建过程中不会发出此文本。功能。
我尝试使用 --progress plain
在 Docker build 命令上,但这并没有向我显示容器 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 时?
最佳答案
BuildKit 的工作方式与传统的 docker 构建系统不同。目前,没有直接的方法可以从构建中的一个步骤生成容器并对其进行故障排除。
为了最大限度地利用 BuildKit 的潜力,最好的方法是在较小的逻辑阶段组织构建。以这种方式组织构建后,在运行构建时,您可以使用 --target
指定要在某个阶段停止。 .指定目标后,Docker 会使用构建到该阶段的结果创建一个镜像。您可以使用此容器以与旧构建系统相同的方式进一步排除故障。
以这个例子为例。这里我有 4 个阶段,其中 2 个是并行阶段:
FROM debian:9.11 AS stage-01
# Prepare for installation
RUN apt update && \
apt upgrade -y
FROM stage-01 as stage-02
# Install building tools
RUN apt install -y build-essential
FROM stage-02 as stage-02a
RUN echo "Build 0.1" > /version.txt
FROM stage-02 as stage-03
RUN apt install -y cmake gcc g++
现在您可以使用
--target
告诉 Docker 你想停在
stage-02
的选项如下:
$ docker build -f test-docker.Dockerfile -t test . --target stage-02 [+] Building 67.5s (7/7) FINISHED
=> [internal] load build definition from test-docker.Dockerfile 0.0s
=> => transferring dockerfile: 348B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/debian:9.11 0.0s
=> [stage-01 1/2] FROM docker.io/library/debian:9.11 0.0s
=> CACHED [stage-01 2/2] RUN apt update && apt upgrade -y 0.0s
=> [stage-02 1/1] RUN apt install -y build-essential 64.7s
=> exporting to image 2.6s
=> => exporting layers 2.5s
=> => writing image sha256:ac36b95184b79b6cabeda3e4d7913768f6ed73527b76f025262d6e3b68c2a357 0.0s
=> => naming to docker.io/library/test 0.0s
现在您拥有名称为
test
的图像您可以生成一个容器来进行故障排除。
docker run -ti --rm --name troubleshoot test /bin/bash
root@bbdb0d2188c0:/# ls
使用多个阶段有助于故障排除,但它确实加快了构建过程,因为并行分支可以构建在不同的实例上。此外,构建文件的可读性显着提高。
关于docker - 从 Docker buildkit 获取容器 ID 以进行交互式调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66186620/
我正在使用 Buildkit 探索 docker 构建过程。在调用 docker build 之前,我通过在 CLI 上设置环境变量 DOCKER_BUILDKIT=1 来启用它。来自 buildki
重新启动 buildkite 代理的命令是什么? 最佳答案 按照默认配置在 Ubuntu 上重新启动 Buildkite 代理应该是: sudo systemctl restart buildkite
我使用 --ssh docker buildkit 功能,它在本地运行良好。 我想在远程服务器上构建 Docker,为此我使用了 -A标记转发我的本地 github key ,例如: ssh -i "
我们有一个 monorepo,里面有 3 个系统。我想为每个系统创建一个单独的构建。 如何仅当特定文件夹中的文件更改时才触发管道? 我们正在使用github steps: - label: 'Li
有 Docker 构建工具包:https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md
今天早上我发现了这个适用于 iOS 的自动化工具 here 。它看起来真的很有趣,但不幸的是我在安装它时遇到了这个错误: ERROR: Could not find a valid gem 'bui
我最近听说了 Buildkit,并一直在尝试将它与 Docker 一起使用。 我正在使用DOCKER_BUILDKIT=1 docker 构建。 -t 实验性的构建我的 Dockerfile。 由于缺
我试图让 maven 离线构建在 docker 容器中工作。我已经启用了 buildkit。我跑了mvn dependency:go-offline -s ~/checkouts/settings.x
据我了解: 它们都是构建容器镜像的工具 构建本身在容器中运行 构建可以发生在远程节点上,例如在 Kubernetes 集群 ( Kaniko , BuildKit ) 中 它们都提供高级功能,例如层缓
我试过 export DOCKER_BUILDKIT=1之前 docker-compose build命令,我没有看到预期的 BuildKit 输出。我错过了什么? 最佳答案 对 BuildKit 的
我从文档中得到了这个命令,但我真的不知道如何使用它或者我应该从哪里开始移动,我是 docker 新手,我仍然很难消化概念: $ DOCKER_BUILDKIT=1 docker build . 如何使
我正在尝试使用 builtKit 制作一个简单的图像生成器的原型(prototype)。 , Docker 的新镜像生成器。我没有使用命令行界面,而是使用 client .除了 examples 之外
我最近听说了 Buildkit,并一直在尝试将它与 Docker 一起使用。 我正在使用DOCKER_BUILDKIT=1 docker build . -t experimental构建我的 Doc
我正在使用 Build Toolkit 为每个微服务构建 docker 镜像。 ./build.sh export DOCKER_BUILDKIT=1 # .... docker build -t .
我在让 Windows 构建代理运行构建时遇到问题。代理无法 checkout 我的源代码。 (我使用的是 Windows 10)See GitHub issue 我在运行构建时看到以下错误: Bui
假设我正在使用 Docker Buildkit 构建一个镜像。我的图像来自多级 Dockerfile,如下所示: FROM node:12 AS some-expensive-base-image .
众所周知,您可以运行docker commit针对失败的构建过程拍摄容器快照以进行调试。容器 ID 来自 running in 文本。但是,在 Docker 较新的 BuildKit buildx 发
我有一个正在运行的 Buildkite 管道,但我们最近更改了我们的 git 存储库。如何将新存储库挂接到现有管道? 我知道您可以更改 repo url,但是 webhook url 怎么样? 似乎无
我正在尝试在 Google Cloud Build 上将 BuildKit 与 Docker 一起使用,以便我最终可以使用 --secret 标志。我使用 Build Enhancements for
我正在尝试使用docker的buildkit来缓存两次构建之间的 bundle 安装结果。我正在使用新的RUN mount=type-cache...选项来缓存bunder结果以用于后续构建。但是,似
我是一名优秀的程序员,十分优秀!