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

dou*_*lea 2 deployment 64-bit docker arm64 aws-cdk

已解决
按照下面 zessx 的评论,我最终通过添加export DOCKER_DEFAULT_PLATFORM="linux/amd64"到我的 zsh 配置文件中解决了问题。

cdk deploy我最近收到了一台用于工作的 MacBook Pro M2,但在使用时遇到了问题。有一个 numpy 导入问题特别与其“C 扩展”相关。

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

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

谢谢!

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

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

zes*_*ssx 5

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

\n

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

\n

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

\n

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

\n
docker build -t $IMAGE --platform linux/amd64 .\ndocker push ${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${IMAGE}\n
Run Code Online (Sandbox Code Playgroud)\n

--platform在 Dockerfile 中使用该标志

\n
FROM ruby:latest as development\nRUN \xe2\x80\xa6\n\nFROM --platform=linux/amd64 ruby:latest as production\nRUN \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
FROM ruby:latest as development\nRUN \xe2\x80\xa6\n\nFROM --platform=linux/amd64 ruby:latest as production\nRUN \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

使用DOCKER_DEFAULT_PLATFORM环境变量

\n
docker build -t $IMAGE --target production .\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n