问题标签 [buildx]
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 - docker buildx“导致执行用户进程:执行格式错误”
我正在尝试交叉编译一个 rust 应用程序以在我的树莓派集群上运行。我看到来自 docker 的 buildx 应该能够使这成为可能。我现在有一个最小的 dockerfile,如下所示:
我尝试通过运行以下命令来编译它:docker buildx build --platform=linux/arm/v7 some/repo:tag .
当我这样做时,我收到以下错误:
我觉得我在这里遗漏了一些非常基本的东西,希望有人告诉我为什么这么简单的东西对我不起作用。
我在 Ubuntu 操作系统上运行 docker 版本 20.10.1
提前致谢!
输出docker buildx inspect --bootstrap
:
输出ls -l /proc/sys/fs/binfmt_misc/
:
.net - 使用 buildx 在 x64 平台上使用 dotnet 构建 arm32 映像会引发错误
介绍
我目前正在尝试使用 dotnet 为多个平台自动构建 docker 映像。
我读过最好的方法是使用 docker buildx 命令。
我试图为 arm32 arm64 和 x64 设置它。x64 和 arm64 的构建使用此命令可以正常工作,但是我遇到了 arm32 的问题。这是我正在执行的命令:
错误
我得到的错误是:
我已经在这里(https://github.com/dotnet/dotnet-docker/issues/1537#issuecomment-615269150)读到您显然无法在 64 位系统上构建 arm32 映像。有人可以解释为什么会这样吗?我的意思是我们正在使用 QEMU 来模拟 arm 对吗?
我可以通过创建一个基于 64 位映像构建的新 dockerfile 来解决这个问题,然后创建一个 arm32 位映像。像这样:
使用 buildx 的想法是重用相同的 dockerfile。那么有没有另一种方法可以使用 buildx 来做到这一点?(例如条件检查或类似的东西)。或者有没有更新/更好的方法来解决这个问题?我还研究过在 buildx 中使用多个 Dockerfile,但找不到与此相关的任何内容。
从理论上讲,我可以使用 docker manifests 手动执行此操作并将它们全部推送到同一个标签,但是由于这似乎有点麻烦,而且每个人都建议 buildx 我宁愿使用它。查看我正在尝试构建的 github + github 操作: https ://github.com/devedse/DeveMazeGeneratorCore
docker - docker-compose 3.7 多平台配置
我刚刚启动了新的 AWS t4g linux/arm64 实例,在其上运行 docker 映像时遇到了问题。
我正在使用 docker-compose.yml 3.7 版,并使用 gitlab CI 运行器来构建图像。我已经阅读了官方文档,但是当谈到实际工作时它有点令人困惑,因为我尝试了几种方法来为 linux/arm64 构建映像,但到目前为止都没有工作。
在这篇文章中,它说不--platform
支持它,docker-compose.yml v3
并且在官方文档中它说buildx
应该包含在 19.3 版本中(我假设它应该适用于 19.3 和更高版本,因为我的实际 Docker 引擎版本是 20.10.3),但没有任何作用。
这是我用于构建 ELK(弹性堆栈)的 gitlab-ci.yml,它失败了,因为--platform
我猜这里不支持。
我还尝试将 ENV 与
由于它被报告为 v3 的错误,有没有办法让它工作/或为 arm64 构建映像?
docker - 如何使用 docker buildx 顺序构建镜像
当我想使用 docker 创建多架构构建时,我使用以下命令:
这工作得很好,但似乎正在同时构建图像。在大多数情况下,这可能是可以接受的,但在其他一些情况下,这似乎太重了,需要太多 RAM 并导致网络故障(并行连接太多)。
有没有办法按顺序构建图像?
我找到的唯一解决方案是分别为每个拱门构建,然后使用“docker manifest create”来组装:
这可能很好,但似乎每个图像都应该被推送到注册表以便“docker manifest create”能够组装。这不是很好,因为它污染了我不想要的标签图像列表。
是否可以在本地图像上使用“docker manifest create”,而无需将每个图像单独上传到注册表?有没有更好的方法来简单地按顺序构建图像?谢谢!
docker - 是否可以分别推送不同架构的 docker 镜像?
据我所知,将使用您在参数中docker buildx build --push
指定的架构覆盖现有的图像架构。--platform
据我了解,在使用buildx
. 但是,我知道官方的 docker 镜像使用 arm64 build farm 来构建 linux/arm64 镜像。这怎么可能?他们只是使用docker push
withoutbuildx
吗?如果是这样,这是否意味着docker push
不会覆盖现有架构buildx
?如果我想在不同的机器上构建和推送多个架构,最好的方法是什么?
docker - Docker:使用 buildx 支持多种架构,我需要在父镜像上使用它吗?
在Docker 论坛上发布以下内容后,我在这里尝试。
我已经尝试了文档中解释的 buildx 命令(来自我的基于 Intel 的 Mac):
但是,当我在 ARM64 上尝试发布的图像时,我仍然得到通常的:standard_init_linux.go:211: exec user process caused "exec format error"</p>
buildx 是否足以获取多架构镜像?还是我需要更多(例如,实际支持 ARM 的 Linux 映像)?
我的镜像是基于另一个镜像的,它是基于Tomcat+Linux镜像的。我需要在所有父母身上重新运行 buildx 吗?
对于那些对细节感兴趣的人,这是关于从它的代码库为我们自己的应用程序构建图像,文档在这里。
提前致谢。
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 .
确实没有任何问题。
java - 如何为原生代码构建 Docker 多架构镜像
我一直在为 Java 应用程序构建一些多架构镜像,基于其他人的多架构基础镜像,该镜像运行良好,因为基础镜像包含适用于架构的正确原生 Java 版本。我所要做的就是添加与平台无关的JAR 文件,并且我有一个可以在我的 Windows 笔记本电脑和我的 rPi Kubernetes 集群上运行的多架构映像。
不过,现在我正在试验 GraalVm,我想创建一个我自己的多架构基础镜像,我的项目都将使用它。这意味着我需要弄清楚如何创建一个多架构 Docker 映像,其中不同的架构需要不同的安装。amd64 Dockerfile 需要安装 amd64 版本的 GraalVm,arm Dockerfile 需要安装 GraalVM 的 arm 版本。
我过去曾使用带有 --build-arg 的 Dockerfile ARG 来计算为 GraalVm 安装程序下载的 URI,但我一直坚持如何使用“buildx”来执行此操作。
似乎我观看的每个演示/教程都使用了一个简单的示例,其中他们添加的文件不是特定于架构的。因此,无论构建的平台如何,他们都可以添加它们。人们如何解决这个问题?buildx 不适合这个问题吗?
manifest 方法似乎更适合这个问题(尽管更冗长),因为我可以为每个架构创建一个图像,然后将它们组合起来,从而让我有机会以不同的方式构建它们。这只是工具的限制吗?如果可以的话,我宁愿用 buildx 来做。