docker - M1 上的 Docker:standard_init_linux.go:219:exec 用户进程导致:exec 格式错误
问题描述
我尝试创建一个基于 alpine 的 docker 映像,但每当我尝试运行它时,都会收到以下错误消息:standard_init_linux.go:219: exec user process caused: exec format error
.
这是只运行可执行文件的基本 Dockerfile:
FROM alpine:3.13.5
WORKDIR /usr/local/bin
COPY profiles-svc /usr/local/bin
EXPOSE 20002/tcp
ENTRYPOINT ["/usr/local/bin/profiles-svc"]
是该命令profiles-svc
生成的可执行文件。go build
我在我的 ubuntu 笔记本电脑上没有注意到这个问题,只在 Macbook M1 上发生。
在此先感谢您的帮助!
解决方案
问题是有两种不同的架构。如果您go build
在 M1 上使用命令,它将是arm64
,因此如果您尝试在 docker 上使用例如 alpine 映像执行该命令,它将失败。要解决该问题,您需要构建amd64
基于二进制文件。这是命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o out-amd64
. 现在您可以将该二进制文件复制到基于 Linux 的 dockerfile 中,构建并运行。
推荐阅读
- vips - 尝试将 gif 图像写入缓冲区时出错
- android - 应用商店是否会在向客户收费之前发送自动续订电子邮件?
- html - TYPO3 - 创建自定义内容元素后不显示我的内容
- c++ - 如何在数字输出之前添加适当的填充
- azure-data-factory - 为 Dataflow 接收器更改 CSV 文件中的小数点分隔符
- python - 如何计算轴0方向的最大值和最小值?
- http - 在 http 请求中发送 Null
- httpclient - 在 `java.net.http.HttpRequest` 中显式设置 `Content-Length` 标头
- html - 这是我的代码, :first-child 不起作用?
- javascript - 使用 Javascript 将页面导出为 PDF