如何在MacBook M2 arm64上构建用于AWS/x64部署的docker镜像?

问题描述 投票:0回答:1

已解决
按照下面 zessx 的评论,我最终通过将

export DOCKER_DEFAULT_PLATFORM="linux/amd64"
添加到我的 zsh 个人资料中解决了问题。

我最近收到了一台用于工作的 MacBook Pro M2,当我

cdk deploy
使用它时遇到了问题。有一个 numpy 导入问题特别与其“C 扩展”相关。

原始错误是:没有名为“numpy.core._multiarray_umath”的模块。

我看到一旦 cdk 部署开始,Docker Desktop 的第一层就是“ARCHITECTURE arm64”。我猜这至少是构建在实际尝试在 x64 AWS 架构上运行时遇到问题的部分原因。我是否无法在本地进行这样的构建?

谢谢!

我尝试了几个不同版本的 numpy 来导入

从同事的 x64 笔记本电脑部署相同的代码并运行。

docker deployment 64-bit aws-cdk arm64
1个回答
6
投票

Docker 将尝试使用适合您本地架构的镜像。新的 Apple M1/M2 使用 ARM64 架构,因此 Docker 将默认搜索 ARM64 映像。

就您而言,运行时

cdk deploy
您可能正在后端构建图像。该映像将使用 ARM64 架构构建,但预计将在 AMD64 架构上运行。

您有多种方法可以确保为正确的拱门构建图像。

在 Docker 命令中使用
--platform
标志

docker build -t $IMAGE --platform linux/amd64 .
docker push ${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${IMAGE}

在 Dockerfile 中使用
--platform
标志

FROM ruby:latest as development
RUN …

FROM --platform=linux/amd64 ruby:latest as production
RUN …

然后,您可以在 Docker 命令中指定要构建的目标:

docker build -t $IMAGE --target production .

使用
DOCKER_DEFAULT_PLATFORM
环境变量

export DOCKER_DEFAULT_PLATFORM="linux/amd64"

您还可以在

.bashrc
/
.zshrc
中添加此行,但请记住,您将始终使用 AMD64 模拟,即使对于本地项目(其中可以使用本机 ARM64 映像)也是如此。我不会推荐这个。

© www.soinside.com 2019 - 2024. All rights reserved.