M1 上的 Docker:standard_init_linux.go:219: exec 用户进程导致:exec 格式错误

xao*_*_xv 5 docker

我尝试创建一个基于 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"]
Run Code Online (Sandbox Code Playgroud)

profiles-svc是由命令生成的可执行文件go build

我在我的 ubuntu 笔记本电脑上没有注意到这个问题,只发生在 Macbook M1 上。

先谢谢您的帮助!

xao*_*_xv 3

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