问题标签 [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 投票
1 回答
1205 浏览

docker - 使用 buildkit 和 mirror.gcr.io 构建 Docker 在未缓存的图像上失败

当构建一个引用未缓存的图像的 Dockerfile时,以及使用;mirror.gcr.io启用时 DOCKER_BUILDKIT=1构建失败:

0 投票
4 回答
3064 浏览

docker - 在一个 docker build 期间标记多个目标

我有一个包含多个目标的 Dockerfile。例如:

为了构建和标记最终图像,我使用:

为了构建和标记中间目标,我提供--target了参数:

但是是否可以构建最终图像并标记所有中间图像?换句话说,与:

但是只有一个命令?

我认为需要一些解释。如果使用 buildkit ( export DOCKER_BUILDKIT=1),那么所有独立的目标都是并行构建的。所以它比一个一个地构建它们要快得多。而且我需要标记每个目标以将它们推送到 docker 注册表以及最终目标。

目前我在没有 buildkit 的情况下在 CI 中构建我的图像,我正在尝试加快这个过程。

0 投票
0 回答
122 浏览

docker - docker --cache-from 是使用本地还是远程注册表?

--cache-from在使用 docker buildkit功能时,我找不到有关使用哪个注册表(本地或远程)的任何信息。

假设我运行这个:

现在,我对我的进行一些更改Dockerfile并重新运行:

但是这次我没有将镜像推送到远程注册表上,这意味着本地和远程版本my-registry/my-image-name不同。

当我现在运行时,哪个图像将用于缓存:

?

0 投票
0 回答
37 浏览

docker - 我们如何使用 docker buildkit 从中间层运行?

在非 buildkit 模式下,当我们构建时,我们有这样的输出:

如果它在某处失败,我们可以简单地从这些中间层运行,方法是使用带有类似docker run -ti 13d191aa76c1 bash.

我找不到如何在启用 buildkit 的情况下做同样的事情。使用--progress=plain标志时,我看到以下类型的输出

有没有一种方法可以像没有 buildkit 一样在中间层上运行?我们如何使用该 sha256 标识符?

谢谢!:)

0 投票
0 回答
257 浏览

docker - Docker 多阶段构建缓存

IIUC,docker 本身不支持在存储库中缓存多阶段构建层。我曾期望缓存多阶段构建的结果,但事实并非如此?

例如,拿一个玩具构建文件:

似乎在使用时--cache-fromstage_0需要重新运行。有没有办法缓存stage_0图像存储库中的结果,这样就不需要每次都构建它,假设输入没有改变?

我一直在为需要大量时间的操作使用多阶段构建——例如编译第三方工具——所以这些将是在构建之间缓存的最有用的项目。

0 投票
1 回答
148 浏览

docker - 如何通过 CI 提取/重用 Docker BuildKit 缓存

Docker 介绍了RUN --mount=type=cache哪些我可以在本地很好地工作,但我希望能够在 CI 特别是 Azure Devops 中利用它。

但是我找不到构建之间的缓存save方式。load有没有办法做到这一点?

0 投票
1 回答
604 浏览

docker - 是否可以分别推送不同架构的 docker 镜像?

据我所知,将使用您在参数中docker buildx build --push指定的架构覆盖现有的图像架构。--platform据我了解,在使用buildx. 但是,我知道官方的 docker 镜像使用 arm64 build farm 来构建 linux/arm64 镜像。这怎么可能?他们只是使用docker pushwithoutbuildx吗?如果是这样,这是否意味着docker push不会覆盖现有架构buildx?如果我想在不同的机器上构建和推送多个架构,最好的方法是什么?

0 投票
1 回答
1929 浏览

docker - 在 docker buildkit 中使用秘密标志的正确方法

我正在努力解决 Gavin 在 这个问题上提到的同样问题。

特别是在新的 docker build secret 信息中

使用该功能的正确方法是什么?

在互联网上环顾四周,我只在上面提到的 docker 文档中发现了相同示例的一些变体,它打印了构建时间的秘密。也许我没有完全理解这个例子,所以请帮助我。

如果无法在构建时获取秘密并用于 Dockerfile 的另一部分(例如 ARG 变量或 RUN 命令),那么何时以及如何使用该新功能来真正保护我的秘密并完成工作?

我的目标是在构建时使用这个新功能,并确保我的秘密信息安全,以防有人获取我的图像文件并在其上执行历史记录。

例如,ff 我有一个像这样的 Dockerfile:

我如何使用 docker 文档中提到的新功能来设置我的变量(DOCKER_INFLUXDB_INIT_PASSWORD),例如,它不会记录在图像历史记录中?

提前致谢

0 投票
1 回答
140 浏览

docker - Docker buildx - 选择特定节点来构建 monorepo 支持

我们正在使用一个名为 Tilt ( https://tilt.dev/ )的 K8s 开发工具,它使用大量微服务构建堆栈的开发映像,并允许实时重新加载等。

buildx create我已经使用10 个副本将远程构建器 pod 部署到 AWS K8s 集群。但是,分离构建似乎只使用其中两个 pod 进行实际构建(基于我在集群中看到的 CPU 和内存指标),而其他 8 个则处于空闲状态。运行向上倾斜会启动所有微服务的并发镜像构建,因此将构建步骤分散到所有 10 个正在运行的构建器 pod 上是理想的。

我怀疑这是因为我们的项目当前存在于 monorepo 中,并且在项目的根级别使用相同的 Dockerfile.dev 来构建所有图像(在构建时使用的次要配置传入--build-arg

  1. 我对此的怀疑是正确的吗?很难说,但似乎 buildx 负载平衡基于 Dockerfile 上下文。如果是这样,可以覆盖此行为吗?

  2. 或者,有没有办法手动选择 buildx 节点?很容易编写一个在现有远程节点上循环的选择器以分散构建负载

0 投票
1 回答
506 浏览

docker - buildx 无法构建多平台 docker 映像,因为它尝试复制 xattrs(扩展文件属性)并且无法执行此操作

我使用 buildx 在 gitlab-ci 中构建多平台 docker 映像。但是 ci 在构建 docker 映像时失败,因为它尝试复制 xattrs 并且无法执行此操作:

https://gitlab.com/Lukas1818/docker-youtube-dl-cron/-/jobs/1176558386#L181

我正在使用以下 ci:

https://gitlab.com/Lukas1818/docker-youtube-dl-cron/-/blob/d12adf7779f7df71de6e9b46aa342e9ff41d5dfb/.gitlab-ci.yml

Dockerfile

在我的本地机器上,使用构建sudo docker buildx build --platform linux/arm/v7,linux/arm64/v8,linux/amd64 .确实没有任何问题。