问题标签 [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 回答
1415 浏览

jenkins - 将变量添加到 Jenkinsfile 中的 dockerfile{} 部分以启用 docker_buildkit

这是我的代码片段:

现在我想在运行这段代码时添加特殊变量 DOCKER_BUILDKIT=1。例如,在 shell 中,它应该看起来像:“DOCKER_BUILDKIT=1 docker build 。” 我需要它,因为我想在 docker_buildkit 模式下运行我的 docker。我怎样才能做到这一点?

0 投票
1 回答
3527 浏览

docker - 如何重用来自 `RUN --mount=type=cache` docker build 的缓存?

我正在使用新的实验性 docker buildkit 语法进行多阶段构建,如下所示:

Dockerfile:

重击:

在当地工作得很好。在 CI 上,我每次都会得到一个新的 docker 环境,所以没有缓存。

我可以将文件导出和导入到环境中,但我不知道缓存在哪里。有任何想法吗?

或者我应该通过一些 docker 命令导出/导入缓存吗?我已阅读https://docs.docker.com/engine/reference/commandline/build/#specifying-external-cache-sourceshttps://github.com/moby/buildkit#export-cache但尚不清楚对我来说,哪个是特定于 buildkit 的,哪个是特定于 docker 的,或者是否真的适用于挂载到 Dockerfile RUN 命令中的缓存。

我在这里添加了一个失败测试的公共要点,展示了我希望的内容: https ://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71/6308f1bdb062a8982017193b96d61ec00a7698c5

而这个后来的修订工作,但我对它不满意 - 太多的引导: https ://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71

0 投票
1 回答
903 浏览

docker - 使用 buildkit 构建时如何附加到中间 docker 容器

我最近听说过 Buildkit,并一直在尝试将它与 Docker 一起使用。

DOCKER_BUILDKIT=1 docker build . -t experimental 用来构建我的 Dockerfile。

Dockerfile由于缺少一些依赖包,我的构建不正确。

我想要做的是附加到最后一个工作的中间容器并使用apt工具解决问题。

在没有 Buildkit 的情况下进行构建时,可以使用来自终端输出的中间容器的哈希值来实现。

但是,Buildkit 的输出并没有为我提供这样的值。那么,我有什么方法可以访问它们吗?

提前致谢。

0 投票
0 回答
52 浏览

docker - 不要使用层缓存,但在使用 docker+buildkit 时使用 mount-cache

使用 buildkit 时,使用 docker cli 前端,有时我不想使用 layer-cache,但确实想依赖较新的 mount-cache 类型。

但是,运行docker build --no-cache似乎会禁用两者。

有没有办法选择在重建期间只使用 mount-cache ?

0 投票
0 回答
147 浏览

docker - 使用 ADD 通配符进行 Docker 缓存

我不确定这一点,但我注意到在使用通配符复制文件时 docker 层缓存会中断,请参阅以下构建上下文:

在此处输入图像描述

问题是,当修改Kernel.php(添加空格,任何东西......)并docker build再次运行时,“复制作曲家。*”之后的图层每次都会再次运行,即使没有修改作曲家数据......

第一次运行

现在编辑Kernel.php并再次运行:

可以通过以下更改来修复此行为:

代替

但困扰我的是为什么会这样?我已经为此浪费了几个小时:/

码头工人版本

以下是文件:

作曲家.json

Dockerfile

应用\内核.php

0 投票
2 回答
3168 浏览

macos - Docker BuildKit --mount=type=cache 不工作,为什么?

我正在尝试实现Buildkit 的缓存挂载功能。

我的 Dockerfile 是:

命令:docker build --progress=plain -t abc:1 . --no-cache

首次运行输出:

第二次运行输出:

预期的:

在第二次运行中,我期待pyyaml从缓存中被选中。

操作系统:Mac OS Catalina (10.15.3)

码头工人版本:

在此处输入图像描述

参考:https ://stackoverflow.com/a/58021389/1060337

0 投票
1 回答
5439 浏览

git - 如何在 docker 中使用挂载的 ssh 来执行 Dockerfile 中的后续命令

在使用 CMD 运行我的容器时,我必须执行 git push。但是 ssh 在最后一行(即 CMD 部分)中不可用,无法执行 git push。我可以在这里做什么来获取 git push 的 ssh 密钥?有人请帮助我。

请找到我的Dockerfile

然后我使用以下命令在运行期间传递我的 ssh 密钥

0 投票
0 回答
2419 浏览

docker - 构建失败时的 Docker 挂载类型绑定

我正在使用 docker build kit 通过 docker image 构建。

我想绑定主机卷来缓存库,我使用的是挂载类型绑定。这是我的码头文件。(参考这里这里

语法RUN --mount=type=bind,source=/home/ubuntu/.m2,target=/root/.m2,rw mvn clean dependency:go-offline -B引发以下错误。

我检查了,路径/home/ubuntu/.m2存在。语法有问题吗?

我之前用过--mount=type=cache,效果很好。我想切换到这个的原因是,如果下载的 maven 库存储在它自己的主机文件系统中,那么即使我们这样做docker system prune --all,我们也不需要再次下载缓存的库。

0 投票
2 回答
20716 浏览

docker - Docker Buildx 无法从本地提取继承的映像

我的主机( Ubuntu 20.04 )上有 2 个 Dockerfile。我正在运行 docker-ce 版本 Docker 版本 19.03.12,构建 48a66213fe 并启用了实验功能。我能够为 ARM 架构使用“docker buildx”构建它们中的每一个,并在我的嵌入式 Linux ARM 板上成功运行它们。

Dockerfile 1:

Dockerfile 2:

在主机上创建 ARM 兼容映像的构建过程:

在 ARM 上加载图像:

订阅者的步骤相同。

由于图像基本相同,我想将发布者 Dockerfile 更改为以下内容:

Docker 图像显示它在本地:

但我得到如下所示的错误 - 它总是试图从 docker.io 中提取(它显然没有我试图继承的图像):

如何让 buildx 使用本地映像?谢谢。

0 投票
1 回答
407 浏览

docker - 使用 Docker Buildkit 构建映像时 --cache-from 参数的顺序是否重要?

假设我正在使用 Docker Buildkit 构建图像。我的图像来自多级 Dockerfile,如下所示:

我现在正在尝试构建这两个图像。假设我将这些推送到 Docker Hub。如果我要使用 Docker Buildkit 的外部缓存功能,那么我想通过在some-expensive-base-image:latest构建目标时拉入远程映像作为缓存来尝试节省我的 CI 管道上的构建时间some-expensive-base-image。而且,我想同时提取刚刚构建的some-expensive-base-image图像和远程my-app:latest图像作为后一个图像的缓存。我相信我需要两者都是为了防止需要some-expensive-base-image重建的步骤,因为......嗯......它们很昂贵。

这是我的构建脚本的样子:

我的问题:论点的顺序对--cache-from第二个很重要docker build吗?

对于此构建,我的 CI 管道上的结果不一致。在构建后一个映像时会发生缓存未命中,即使没有任何会导致缓存破坏的代码更改。可以毫无问题地拉出 Cache Minefest。有时会拉取缓存映像,但有时需要重新运行后一个目标的所有步骤。我不知道为什么。

碰巧,我应该在我的脚本中运行命令之前尝试docker pull两个图像吗?docker build

另外,我知道我在示例中提到了 Docker Hub,但在现实生活中,我的应用程序使用 AWS ECR 作为其远程 Docker 存储库。这对适当的 Buildkit 功能有影响吗?