在linux/amd64主机上构建linux/arm64 docker镜像。

8

我正在运行一个由我自己构建的 Jenkins Alpine Linux AMD64 docker 镜像,并希望将 linux/arm64 docker buildx 支持添加到其中,以生成多平台镜像,但我不知道它应该如何工作。

当我检查支持的平台时,得到以下结果:

+ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker                  
  default default         running linux/amd64, linux/386

由于我在一个 AMD64 映像中,因此需要安装 qemu 才能支持 linux/arm64 架构。但是我不知道如何让 buildx 识别它。

有关此问题的文档相对较少,可以参照以下链接: https://docs.docker.com/buildx/working-with-buildx/

有没有人知道如何在 linux/amd64 映像中添加 linux/arm64 构建功能?

目前我唯一的解决办法是在实际的 arm64 系统上构建映像。


这个有帮助吗?https://dev59.com/8lEG5IYBdhLWcg3wYb9A#66921165 - Beppe C
谢谢,我也尝试使用buildx并设置平台,但出于某些原因我无法在AMD64上构建ARM64镜像。 - Sam
有趣,不确定这是否是Docker的限制。另一种选择(不确定是否适用于您的情况)是使用CI / CD工具(Github Actions)构建图像,在那里更加灵活。 - Beppe C
1个回答

18

要使用buildx,请确保您的Docker运行时至少为19.03版本。实际上,buildx默认已经与Docker捆绑在一起,但需要通过设置环境变量DOCKER_CLI_EXPERIMENTAL来启用。

export DOCKER_CLI_EXPERIMENTAL=enabled

如果您使用Linux,您需要设置binfmt_misc。在大多数发行版中,这相当容易,但现在您可以仅运行特权的Docker容器来为您设置,这样做会更加简单。

docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d
创建一个新构建器,该构建器可以访问新的多架构特性。
docker buildx create --use --name multi-arch-builder

然后你就可以使用以下命令构建容器:

docker buildx build --platform=[your target platform] ...

这是我在我的Jenkins流水线中使用的设置。

相关文档:


4
docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d 不再起作用了。但我发现只需要运行 docker buildx create --use --name multi-arch-builder 这个命令,就可以让 buildx 正常工作! - Alexei Andreev
我可以用Jenkins DIND容器在只有containerd的主机上做同样的事情吗? - anVzdGFub3RoZXJodW1hbg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接