首页 > 解决方案 > 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 上发生。

在此先感谢您的帮助!

标签: docker

解决方案


问题是有两种不同的架构。如果您go build在 M1 上使用命令,它将是arm64,因此如果您尝试在 docker 上使用例如 alpine 映像执行该命令,它将失败。要解决该问题,您需要构建amd64基于二进制文件。这是命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o out-amd64. 现在您可以将该二进制文件复制到基于 Linux 的 dockerfile 中,构建并运行。


推荐阅读