我的目标是构建一个Docker Build镜像,它可以用作 CI 阶段,能够构建多架构镜像。
FROM public.ecr.aws/docker/library/docker:20.10.11-dind
# Add the buildx plugin to Docker
COPY --from=docker/buildx-bin:0.7.1 /buildx /usr/libexec/docker/cli-plugins/docker-buildx
# Create a buildx image builder that we'll then use within this container to build our multi-architecture images
RUN docker buildx create --platform linux/amd64,linux/arm64 --name=my-builder --use
^ 构建我需要的容器,但不包括arm64
. 这意味着当我尝试通过类似的命令使用它来构建多架构映像时docker buildx build --platform=$SUPPORTED_ARCHITECTURES --build-arg PHP_VERSION=8.0.1 -t my-repo:latest .
,我收到错误消息:
error: failed to solve: process "/dev/.buildkit_qemu_emulator /bin/sh -c apt-get update && apt-get -y install -q ....
解决方案是docker run --rm --privileged tonistiigi/binfmt --install arm64
作为 CI 步骤的一部分运行,它使用buildx
我之前构建的容器。但是,我真的很想通过在 Dockerfile 中添加类似这样的内容来了解为什么模拟器似乎无法安装在容器中:
# Install arm emulator
COPY --from=tonistiigi/binfmt /usr/bin/binfmt /usr/bin/binfmt
RUN /usr/bin/binfmt --install arm64