问题标签 [docker-buildkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
32 浏览

docker - Docker Build 的专用机器面临瓶颈(启用了 buildkit)。Docker Build 因多个并发构建而变慢

我们正在尝试将专用 AWS EC2 实例用于我们所有组织的 docker 构建。我们正在使用 build_kit,我们在这里试图达到的目标是在我们所有人之间拥有一个共同的缓存。然而,我们注意到,当同时发生多个 docker build 时,docker build 执行时间的延迟显着增加(高达 200%)。我们通过更高的 RAM、CPU 和 IO 互联网速度显着增加了实例的大小。但是,其中大部分资源都没有被使用,我们的分析结果非常相似。

如果一台机器上同时发生多个 docker build,瓶颈是什么?docker daemon 上是否发生了一些排队?这是假设资源不是问题。

这台机器正在使用 linux,因此本机应该使用所有可用资源。我们没有看到任何地方都设置了限制。

0 投票
0 回答
27 浏览

docker - Docker 检查等效 w/buildkit/buildctl

我们一直在使用“docker inspect”命令来确定在我们的 CI 管道中生成的 Docker 容器是否以 root 身份运行(这会导致开发人员感到讨厌。)但是我们的安全团队让我们将 CI 基础设施切换到 buildkit/ buildctl 因为它运行时不需要暴露的 docker 套接字。

buildctl 中是否有类似的检查命令(我在文档中找不到任何内容)或者是否有更好/不同的方法来确定 buildkit(d) 中构建的容器是否以 root 身份运行?

谢谢!

0 投票
0 回答
116 浏览

docker - DOCKER BUILDKIT:在构建时使用现有的秘密

我发现的所有 docker buildkit 示例都引用了一个创建的秘密 txt 文件,该文件传递给 build 命令。我在尝试使用的管理器节点上有一个秘密:

然后这就是我得到的:

0 投票
1 回答
65 浏览

spring-boot - java layertools extract不保留时间戳

我正在使用分层 jar 文件方法 [1] 来优化我们的 Docker 映像构建时间。我注意到从以下命令中提取的 jar 文件不会保留提取的单个 jar 文件的时间戳。

如果我运行上述命令,请检查提取文件的时间戳,然后重新运行该命令并重新检查它们始终更新为当前时间的时间戳。

例子:

...等待〜5分钟...

这对我来说是个问题的原因是我正在尝试使用 Docker buildkit [2] 优化来减少发送到远程 Docker 守护程序的构建上下文的数量。使用分层 jar 文件方法和 Docker buildkit 背后的想法是避免将任何依赖 jar 文件发送到远程 docker 守护进程,除非它们以某种方式发生变化。Docker buildkit 似乎注意到了更改的时间戳,然后将所有文件发送到远程服务器,即使这些文件的校验和与之前的构建相同。我已经确认,如果我只是在不重新提取文件的情况下进行构建,那么很少有数据会发送到远程 Docker 守护进程。

使用分层 jar 文件可以很好地减少在 a 上发送的数据量,docker push但我们的工作流程需要在远程服务器上构建 docker(通过 IntelliJ 的远程 docker 构建功能)

这引出了我的问题:

a) 是否可以在保留时间戳的同时提取图层?

b) 是否可以让 docker buildkit 查看校验和而不是时间戳?

[1] https://spring.io/blog/2020/08/14/creating-efficient-docker-images-with-spring-boot-2-3 [2] https://docs.docker.com/develop /develop-images/build_enhancements/

0 投票
1 回答
58 浏览

docker - 如何使用多级 Dockerfile 获得大量缓存

目前我有以下 Dockerfile:

我有 docker-compose 文件,如下所示:

还有两个空文件:

如果我使用 buildkit 进行初始构建,并将它们推送到注册表:

在撰写文件中牢记缓存来源:

案例1)我希望当我没有本地缓存​​时,即

一个新的构建将被完全缓存,(它是):

案例2)我希望如果我编辑文件,那么只有docker文件中的最新阶段需要重做,input2COPY-ingof开始,它会:input2

案例3)当我编辑input文件时,我希望第一阶段被缓存到该COPY input input行,唉,这不会发生,由 uncacheRUN sleep 10行发出信号:

主要问题:有没有办法为最终图像中的阶段以外的阶段进行缓存?

github上好像有相关问题

然而,它的结论似乎并没有解决我的上述问题。

0 投票
1 回答
88 浏览

docker - docker buildkit 是否可以与已安装的 docker.sock 和 docker compose 一起使用?

我正在尝试从装有 docker.sock 的计数器内部启动同级容器。容器可以毫无问题地启动简单的同级容器,但是在使用 docker-compose 脚本时,它会失败并显示:

demo.dockerfile 是我试图从中构建图像的 dockerfile,从 docker-compose 文件中引用。

有没有人使用过 docker-compose 和 buildkit 和安装的 docker.sock ?

就像查找 dockerfile 的路径变得混乱一样。

0 投票
1 回答
46 浏览

git - BuildKit:ssh 挂载在容器中无法正常工作

所以,情况就是这样。我正在尝试在 Docker WSL2 上使用 BuildKit 构建映像,提供 ~/.ssh/config:

做 ssh 密钥添加:

Dockerfile 片段:

但是当 Docker 进行克隆时——我看到了这个:

正如您在 config 中看到的,密码是在 ssh 中定义的config。另外 - 我known_hosts在 ssh-keyscan 之后有空白。在你问之前 - 我可以轻松地在主机上克隆项目而不会出现这些问题。

我知道我可以通过直接传递 ssh 密钥来绕过这个问题,但是由于 BuildKit 提供了这个机会——我做错了什么?

0 投票
0 回答
20 浏览

jenkins-pipeline - 如何替换在 buildkite 工具下运行的 pipeline.yaml 中的硬编码值

我有一个用例,我需要运行相同的管道但使用不同的环境变量,例如 dev/qa/stage/prod。

我尝试使用环境变量在运行时进行更改但没有成功

管道.yaml

我如何传递 env 值。 在此处输入图像描述

请帮我解决这个问题。

0 投票
0 回答
137 浏览

docker - 通过 Process Substitution 将 envsubst 与 Dockerfile 一起使用会破坏构建

每当我尝试使用我放置的包装脚本来构建我的 Docker 映像时,我都会遇到一个问题,该脚本允许使用主机环境变量进行适当的 ENV 替换。

每当我执行我的脚本时,我都会收到错误消息:

这是包装脚本

这是Dockerfile

我真的很感激这里的一些帮助。

谢谢大家!

0 投票
1 回答
155 浏览

docker - Docker 构建:如何获得完整的 RUN 命令输出?

更新:这个问题用 MVRE 重构。

有没有办法可以RUN从使用 Dockerfile 构建的完整命令中查看docker build 例如,如果我的 Dockerfile 有以下语句:

...有没有办法我可以看到完整的命令,即echo "this is the song that doesn't end. Yes it goes on and on, my friends. Some people started singing it not knowing what it was, and they'll continue singing it forever just because..." 以及运行该命令的完整输出?

我使用 docker build kit 构建(我不希望禁用它),默认情况下,它会折叠输出,并截断相对于终端宽度执行的命令,最终可能看起来像这样:

...即命令及其输出都被截断/折叠。

本文docker inspect应该用于此目的,在我的情况下:docker inspect tmp:tmp,并且我的答案将在$[0].Config.Cmd输出部分中,但该部分不包含相关信息:

...该命令的任何其他部分也不docker inspect包含相关信息(cmake我的示例中的声明)。

本文建议使用--progress plain选项来docker build. 这会展开命令的输出,但它仍然会截断命令本身,例如:

有没有办法我可以看到 DockerfileRUN语句执行的完整(未截断)命令(以及命令的未折叠输出)?

我执行的输出docker history