docker run 命令出现“Exec 格式错误”

Ale*_*lls 7 shell sh docker dockerfile

我有这个基于 Golang 的 Dockerfile:

FROM golang:latest

RUN mkdir -p /app

WORKDIR /app

COPY bin/huru .

CMD ./huru
Run Code Online (Sandbox Code Playgroud)

我检查了一下,huru 二进制文件位于工作目录中。我收到此错误:

/bin/sh: 1: ./huru: 执行格式错误

有人知道那是什么吗?“docker build”成功,但“docker run”失败并出现该错误。

Ale*_*lls 8

“Exec 格式错误”只是因为我将 OSX/MacOS 上构建的二进制文件复制到 Docker 映像中,并尝试在 Linux 容器中运行该二进制文件。那是行不通的。

这是对我有用的 Dockerfile:

FROM golang:latest

RUN mkdir -p /app

WORKDIR /app

COPY . .

ENV GOPATH /app

RUN go install huru

ENTRYPOINT /app/bin/huru
Run Code Online (Sandbox Code Playgroud)

我的项目结构在我的主机 fs 上如下所示:

$GOPATH/
      src/
        huru/
      .dockerignore
      Dockerfile
Run Code Online (Sandbox Code Playgroud)

我跑:

docker build -t foo .
docker run foo
Run Code Online (Sandbox Code Playgroud)

我的 .dockerignore 文件包含:

.vscode
bin
pkg
Run Code Online (Sandbox Code Playgroud)


SaW*_*SaW 7

如果您想在 Macos 上运行 docker 镜像,那么只需指定目标操作系统就足够了:

假设有src和bin文件夹,在src文件夹中执行:

env GOOS=linux go build  -o ../bin
Run Code Online (Sandbox Code Playgroud)

(这适用于m1,使用arm64架构)

顺便说一句,我不会使用最新的,我看到有一个基于 1.20 的 docker 镜像在撰写本文时尚未正式发布。