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 格式错误”的主要内容,如果未能解决你的问题,请参考以下文章
已解决Apple Mac M1 docker环境下nacos无法启动