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

Sam*_*Sam 10 docker buildx

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

当我检查支持的平台时,我得到:

+ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker                  
  default default         running linux/amd64, linux/386
Run Code Online (Sandbox Code Playgroud)

因为我在 AMD64 映像中。我读到我需要为此安装 qemu,但我不知道 buildx 如何识别它。

该文档对此相对简单: https: //docs.docker.com/buildx/working-with-buildx/

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

我现在看到的唯一解决方案是在实际的 arm64 系统上构建映像。

mat*_*ibi 21

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

export DOCKER_CLI_EXPERIMENTAL=enabled
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Linux,则需要设置 binfmt_misc。这在大多数发行版中都非常简单,但现在更容易,因为您只需运行特权 Docker 容器即可为您进行设置。

docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d
Run Code Online (Sandbox Code Playgroud)

创建一个新的构建器,可以访问新的多架​​构功能:

docker buildx create --use --name multi-arch-builder
Run Code Online (Sandbox Code Playgroud)

然后您将能够使用以下方式构建容器:

docker buildx build --platform=[your target platform] ...
Run Code Online (Sandbox Code Playgroud)

这是我在 Jenkins 管道上使用的设置。

相关文档:

  • `docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d` 不再起作用。但我发现“docker buildx create --use --name multi-arch-builder”是我必须运行的唯一命令。之后“buildx”就起作用了! (4认同)