问题标签 [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.
docker - 使用 buildkit 和 mirror.gcr.io 构建 Docker 在未缓存的图像上失败
当构建一个引用未缓存的图像的 Dockerfile时,以及使用;mirror.gcr.io
启用时 DOCKER_BUILDKIT=1
构建失败:
docker - 在一个 docker build 期间标记多个目标
我有一个包含多个目标的 Dockerfile。例如:
为了构建和标记最终图像,我使用:
为了构建和标记中间目标,我提供--target
了参数:
但是是否可以构建最终图像并标记所有中间图像?换句话说,与:
但是只有一个命令?
我认为需要一些解释。如果使用 buildkit ( export DOCKER_BUILDKIT=1
),那么所有独立的目标都是并行构建的。所以它比一个一个地构建它们要快得多。而且我需要标记每个目标以将它们推送到 docker 注册表以及最终目标。
目前我在没有 buildkit 的情况下在 CI 中构建我的图像,我正在尝试加快这个过程。
docker - docker --cache-from 是使用本地还是远程注册表?
--cache-from
在使用 docker buildkit功能时,我找不到有关使用哪个注册表(本地或远程)的任何信息。
假设我运行这个:
现在,我对我的进行一些更改Dockerfile
并重新运行:
但是这次我没有将镜像推送到远程注册表上,这意味着本地和远程版本my-registry/my-image-name
不同。
当我现在运行时,哪个图像将用于缓存:
?
docker - 我们如何使用 docker buildkit 从中间层运行?
在非 buildkit 模式下,当我们构建时,我们有这样的输出:
如果它在某处失败,我们可以简单地从这些中间层运行,方法是使用带有类似docker run -ti 13d191aa76c1 bash
.
我找不到如何在启用 buildkit 的情况下做同样的事情。使用--progress=plain
标志时,我看到以下类型的输出
有没有一种方法可以像没有 buildkit 一样在中间层上运行?我们如何使用该 sha256 标识符?
谢谢!:)
docker - Docker 多阶段构建缓存
IIUC,docker 本身不支持在存储库中缓存多阶段构建层。我曾期望缓存多阶段构建的结果,但事实并非如此?
例如,拿一个玩具构建文件:
似乎在使用时--cache-from
,stage_0
需要重新运行。有没有办法缓存stage_0
图像存储库中的结果,这样就不需要每次都构建它,假设输入没有改变?
我一直在为需要大量时间的操作使用多阶段构建——例如编译第三方工具——所以这些将是在构建之间缓存的最有用的项目。
docker - 如何通过 CI 提取/重用 Docker BuildKit 缓存
Docker 介绍了RUN --mount=type=cache
哪些我可以在本地很好地工作,但我希望能够在 CI 特别是 Azure Devops 中利用它。
但是我找不到构建之间的缓存save
方式。load
有没有办法做到这一点?
docker - 是否可以分别推送不同架构的 docker 镜像?
据我所知,将使用您在参数中docker buildx build --push
指定的架构覆盖现有的图像架构。--platform
据我了解,在使用buildx
. 但是,我知道官方的 docker 镜像使用 arm64 build farm 来构建 linux/arm64 镜像。这怎么可能?他们只是使用docker push
withoutbuildx
吗?如果是这样,这是否意味着docker push
不会覆盖现有架构buildx
?如果我想在不同的机器上构建和推送多个架构,最好的方法是什么?
docker - 在 docker buildkit 中使用秘密标志的正确方法
我正在努力解决 Gavin 在 这个问题上提到的同样问题。
特别是在新的 docker build secret 信息中
使用该功能的正确方法是什么?
在互联网上环顾四周,我只在上面提到的 docker 文档中发现了相同示例的一些变体,它打印了构建时间的秘密。也许我没有完全理解这个例子,所以请帮助我。
如果无法在构建时获取秘密并用于 Dockerfile 的另一部分(例如 ARG 变量或 RUN 命令),那么何时以及如何使用该新功能来真正保护我的秘密并完成工作?
我的目标是在构建时使用这个新功能,并确保我的秘密信息安全,以防有人获取我的图像文件并在其上执行历史记录。
例如,ff 我有一个像这样的 Dockerfile:
我如何使用 docker 文档中提到的新功能来设置我的变量(DOCKER_INFLUXDB_INIT_PASSWORD),例如,它不会记录在图像历史记录中?
提前致谢
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
)
我对此的怀疑是正确的吗?很难说,但似乎 buildx 负载平衡基于 Dockerfile 上下文。如果是这样,可以覆盖此行为吗?
或者,有没有办法手动选择 buildx 节点?很容易编写一个在现有远程节点上循环的选择器以分散构建负载
docker - buildx 无法构建多平台 docker 映像,因为它尝试复制 xattrs(扩展文件属性)并且无法执行此操作
我使用 buildx 在 gitlab-ci 中构建多平台 docker 映像。但是 ci 在构建 docker 映像时失败,因为它尝试复制 xattrs 并且无法执行此操作:
https://gitlab.com/Lukas1818/docker-youtube-dl-cron/-/jobs/1176558386#L181
我正在使用以下 ci:
在我的本地机器上,使用构建sudo docker buildx build --platform linux/arm/v7,linux/arm64/v8,linux/amd64 .
确实没有任何问题。