Docker buildx 与 Apple M1 Silicon 上的节点应用程序 -standard_init_linux.go:211:exec 用户进程导致“exec 格式错误”

Posted

技术标签:

【中文标题】Docker buildx 与 Apple M1 Silicon 上的节点应用程序 -standard_init_linux.go:211:exec 用户进程导致“exec 格式错误”【英文标题】:Docker buildx with node app on Apple M1 Silicon - standard_init_linux.go:211: exec user process caused "exec format error 【发布时间】:2022-01-21 12:39:09 【问题描述】:

请帮忙!

我正在尝试将 docker 映像部署到 kuebernetes 集群。没问题,直到我用 M1 换到新的 Macbook Pro。

在 m1 机器上构建映像并部署后,我从 kuebernetes pod 收到以下错误: standard_init_linux.go:211: exec user process caused "exec format error"

在做了一些研究之后,我关注了this 中号帖子关于添加和设置docker buildx 的内容。

一旦我使用新的 buildx 构建了一个新镜像并使用 docker 桌面(与 m1 兼容的预览版)在本地运行它,它就可以毫无问题地运行。但是 kubernetes pod 仍然显示相同的错误。 standard_init_linux.go:211: exec user process caused "exec format error"

我的构建命令 docker buildx use m1_builder && docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 -f Dockerfile -t $myDockerRepo --push . ' 在构建过程中,我看到每个平台都注销了它正在运行我的 Dockerfile 中的命令。

我的推送命令docker push $myDockerRepo 需要注意的一件奇怪的事情是 docker push 命令响应中的 sha256 摘要没有改变。

这是我的 docker 文件:

# Use an official Node runtime as a parent image
FROM node:10-alpine

# Copy the current directory contents into the container at /app
COPY dist /app

# Set the working directory to /app
WORKDIR /app

# Make port 8000 available to the world outside this container
EXPOSE 8000

# Run npm run serve:dynamic when the container launches
CMD ["node", "server"]

显然,我不是 docker 专家。 从一头完整的头发开始。低至 3 股。请保存这 3 股。

感谢所有帮助和建议!

更新

我已将 M1 macbook 构建的镜像下载到我的另一台 macbook,并且可以通过 docker 桌面在本地运行该镜像。我不确定这意味着什么。会不会只是 kuebernetes 设置?

【问题讨论】:

你好,你好,欢迎来到 SO。 The fine manual 表示 --platform 标志仅设置 $BUILDPLATFORM$TARGETPLATFORM 并且似乎不会“神奇地”将映像中的可执行文件转换为 M1 或 amd64。恕我直言,您正在努力为与您将在生产中运行的架构不同的架构构建容器 - 为什么不直接使用 --platforms linux/amd64 并减少变量数量? @mdaniel 通过指定单一平台来缩小问题的范围非常有意义。我根据建议更新了我的构建命令。不幸的是,错误仍然存​​在 【参考方案1】:

尝试将 --platform=linux/amd64 添加到您的 dockerfile:

FROM --platform=linux/amd64 node:10-alpine

【讨论】:

这对我有用。有关正在发生的事情、发生此错误的原因以及解决方案有效的原因,请参阅此答案:***.com/a/65952339/199475

以上是关于Docker buildx 与 Apple M1 Silicon 上的节点应用程序 -standard_init_linux.go:211:exec 用户进程导致“exec 格式错误”的主要内容,如果未能解决你的问题,请参考以下文章

Docker 开启 buildx 多CPU架构镜像制作

docker中启用buildx

使用 docker buildx 构建多 CPU 架构镜像

已解决Apple Mac M1 docker环境下nacos无法启动

使用buildx在x86机器上面编译arm64架构的Docker镜像

Docker - 无法使用 docker buildx 构建多平台映像