node.js - Docker buildx 与 Apple M1 Silicon 上的节点应用程序 -standard_init_linux.go:211:exec 用户进程导致“exec 格式错误
问题描述
请帮忙!
我正在尝试将 docker 映像部署到 kuebernetes 集群。没问题,直到我用 M1 换到新的 Macbook Pro。
在 m1 机器上构建映像并部署后,我从 kuebernetes pod 收到以下错误:
standard_init_linux.go:211: exec user process caused "exec format error"
在做了一些研究之后,我关注了这篇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 摘要没有改变。
这是我的码头文件:
# 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"]
很明显,我不是码头工人专家。从一头完整的头发开始。低至 3 股。请保存这3股。
我感谢所有帮助和建议!
更新
我已将 M1 macbook 构建的映像拉到我的另一台 macbook 上,并且可以通过 docker 桌面在本地运行该映像。我不确定这意味着什么。它可能只是一个 kuebernetes 设置吗?
解决方案
尝试将 --platform=linux/amd64 添加到您的 dockerfile:
FROM --platform=linux/amd64 node:10-alpine
推荐阅读
- magento2 - magento api 2 create product error
- javascript - 如何设置网站标题的文本方向?
- angular - 预期未定义是真实的 - Jasmine/Karma
- c++ - (C++) 字符串文字与参数列表不匹配
- ios - iOS -weak_library 和 -bitcode_bundle(Xcode 设置 ENABLE_BITCODE=YES)不能一起使用
- javascript - 数组中的值被覆盖
- vba - 运行 vba 宏,错误为“对象变量或未设置块变量”
- java - JAVA RMI ClassNotFound
- security - 如何授权访问地理服务器图层
- vb.net - VB.net更新方法的附加定义