无法在 Intel Mac 上的 Docker 中运行 HelloWorld Go 程序

Rub*_*uby -4 macos go docker

standard_init_linux.go:228: exec user process caused: exec format error尝试在 Intel Mac 上运行 helloWorld 有一段时间了。在 docker 之外运行良好。

hello.go

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM ubuntu
VOLUME ["/data"]
WORKDIR /data
ENTRYPOINT ["/data/hello"]
Run Code Online (Sandbox Code Playgroud)
$ go build ./hello.go 
$ docker build -t aaa . 
$ docker run -v ${PWD}:/data  aaa

standard_init_linux.go:228: exec user process caused: exec format error

Run Code Online (Sandbox Code Playgroud)
$ uname -a                                                                                                      
Darwin ###-MBP 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; #####/RELEASE_X86_64 x86_64
Run Code Online (Sandbox Code Playgroud)

Kev*_*n B 5

您正在为 macOS 构建二进制文件并尝试在 Linux 容器上运行它。

您可以采取两件事来解决此问题:

  • 向 Dockerfile 添加步骤以在容器本身中编译代码
  • 在Mac本地编译时,通过设置环境变量交叉编译为LinuxGOOS=linux