pet*_*les 5 macos amazon-ec2 docker apple-silicon apple-m1
使用 M1 处理器在 Mac OSX 上构建的映像,部署到 EC2 实例。但是当脚本运行时,它会产生错误:
standard_init_linux.go:219: exec user process caused: exec format error
在 Stackoverflow 的其他地方,这被解释为操作系统架构不匹配。果然在 EC2 实例上运行“uname -m”显示它是 x86_64,“docker image inspect”显示容器具有架构 arm64。
这是我不明白的地方。我的 Mac 上的“uname -m”也显示为 x86_64。那么容器如何继承不同的架构呢?
更重要的是,如何在我的 Mac 上构建可以在 EC2 上运行的映像?
Docker 文件很简单
FROM python
WORKDIR /
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY src /src
Run Code Online (Sandbox Code Playgroud)
src 目前包含一些简单的 python 脚本,执行如下:
docker run container/name python test.py
这在我的 Mac 上运行良好,但在 AWS 上执行时会出现上述错误。
pet*_*les 23
好的。这就是发生的事情。我的 Mac 配备了新的 M1 芯片,并且正在运行Docker Desktop 的技术预览版。在引擎盖下,芯片具有arm64架构,但通过iTerm和VSCode询问它,它声称是x86_64,因此当我发布问题时我很困惑。这可能是因为这两个应用程序都在幕后通过英特尔模拟器悄悄运行,这就是对 uname 命令的响应。
然而,因为处理器实际上是arm64,所以当我从Docker中提取Python图像时,这就是基本架构(我尝试了很多不同风格和版本的Python - 所有这些都具有相同的结果)。
为了强制使用与 amd64 AWS 兼容的映像,我将 Dockerfile 的第一行更改为:
FROM --platform=linux/x86-64 python
。
当此映像中的容器在 Mac 上运行时会导致警告
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
但仅此而已,出现警告,然后脚本运行(可能是通过英特尔模拟器重定向回来)。现在,脚本在 EC2 实例上运行时没有问题(或警告)。
归档时间: |
|
查看次数: |
1199 次 |
最近记录: |