在Docker Hub上进行多平台自动构建出现错误-linux/arm64

80次阅读
没有评论

问题描述

在尝试使用GitHub上的仓库通过Docker Hub进行两个平台(linux/arm64和linux/amd64)的自动构建。用户已经发现,他需要一个包含build文件的hooks目录,可以在其中覆盖默认的构建命令。他创建了以下内容:

#!/bin/bash
export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx create --use --driver docker-container
docker buildx build --platform linux/amd64,linux/arm64 -f $DOCKERFILE_PATH -t $IMAGE_NAME . --push

然而,这只生成了linux/amd64的镜像。用户猜测在构建过程中可能出现了一些问题(构建状态显示为’success’):

#11 [linux/arm64 3/3] RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/t...
#11 0.424 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/aarch64/APKINDEX.tar.gz
...
#11 6.210 Executing busybox-1.31.1-r19.trigger
#11 6.214 ERROR: busybox-1.31.1-r19.trigger: script exited with error 1    <=== 这里出现了错误
#11 6.224 OK: 10 MiB in 33 packages

用户在Windows 10上的个人电脑上执行相同的命令时没有错误。用户将build文件更改为使用默认驱动程序(docker)并仅构建linux/arm64

#!/bin/bash
export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx create --use
docker buildx build --platform linux/arm64 -f $DOCKERFILE_PATH -t $IMAGE_NAME . --push

然而,用户遇到了相同的错误,构建被显示为“success”,新镜像被推送到Docker Hub(新的digest),但os/arch为… linux/amd64,而不是linux/arm64。为什么会这样?
用户的目标是通过Docker Hub的自动构建来构建linux/amd64linux/arm64两个平台的镜像。

解决方案

请注意以下操作可能会受到版本差异影响,请在进行操作前做好备份。
用户遇到的问题可能涉及到不同平台的构建过程中的差异。要实现多平台构建并成功生成适用于linux/amd64linux/arm64的镜像,可以尝试以下方法。

使用多平台构建支持

Docker Buildx 是一个工具,可用于执行多平台构建。你已经在你的脚本中使用了 Buildx 命令,但可能还需要配置一些其他设置来确保多平台构建正常运行。

以下是一种可能的方法来修改你的构建脚本以支持多平台构建:

#!/bin/bash
export DOCKER_CLI_EXPERIMENTAL=enabled

# 创建并切换到 Buildx 构建器
docker buildx create --use --name mybuilder

# 配置支持的平台
docker buildx inspect mybuilder --bootstrap
docker buildx build --platform linux/amd64,linux/arm64 -f $DOCKERFILE_PATH -t $IMAGE_NAME . --push

通过以上步骤,你在构建之前创建了一个名为 mybuilder 的 Buildx 构建器,并指定了支持的平台。然后,你执行构建命令以构建适用于 linux/amd64linux/arm64 的镜像。

确保镜像的正确标签

在你的构建脚本中,确保你指定了正确的镜像标签(-t选项),以确保构建的镜像正确推送到 Docker Hub。

构建日志和错误分析

如果在构建中仍然遇到问题,可以详细查看构建日志以及出现的错误。这将有助于更好地了解在构建过程中发生了什么。你可以逐一检查构建日志中的每个步骤,并查看是否有与平台有关的错误。

更新 Docker 版本

如果你的问题与特定版本的 Docker 有关,可以尝试升级或降级 Docker 的版本。不同版本的 Docker 可能会有不同的行为和问题。

总之,确保你的构建脚本中正确配置了 Buildx 构建器和支持的平台,并检查镜像标签以及构建日志,以便找出并解决问题。

请注意,Docker 平台的构建过程可能会受到不同因素的影响,因此需要一些试验和调整来确保多平台构建的成功。在尝试这些解决方案时,请务必做好备份以防万一。

用户评论:也许 这个答案 可能会对你有所帮助… 我已经将这些命令保存为别名… 有时候我的多平台构建会出问题,我认为这可能是因为我清理了我的镜像、容器和层缓存,或者可能是主机上某些与 Docker 相关的更新;这些命令总能帮我解决问题。

正文完