【发布时间】:2022-01-15 07:46:36
【问题描述】:
我的目标是构建一个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
【问题讨论】: