这不是重复的,因为虽然错误相同,但我的用例与其他用例不同。
我正在编译一个使用 docker 部署的 go 应用程序:
然而,
当我在我的 OSX 机器上构建它并将其发送到 linux 时,我可以将该可执行文件部署到 docker 而不出现任何错误
错误 :
standard_init_linux.go:211: exec user process caused "no such file or directory"
最佳答案
当您使用 cgo
编译您的 go 应用程序时启用编译器动态链接到 libstdc
.
然而,golang:alpine
图像如此之小,因为它没有使用 libstdc
但它的简化版本称为 musl libc
.
错误消息说
standard_init_linux.go:211: exec user process caused "no such file or directory"
如果你连接到你的图像$ docker run -it [image] /bin/sh
您可以在比方说 /dist/myexec
中找到您的可执行文件,但是当您尝试运行该可执行文件时,它会显示 err not found
,显然不是因为它找不到您的可执行文件,而是找不到文件 libc
.解决方案是要么
CGO_ENABLED=0
在 build 时RUN apk add --no-cache libc6-compat
给您的 Dockerfile
golang:alpine
要拥有一个全静态二进制可执行文件,请使用以下命令构建它:
$ CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' .
关于linux - Golang + Linux + Docker 错误 : standard_init_linux. go:211:没有那个文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62632340/