![](/img/trans.png)
[英]Docker - standard_init_linux.go:211: exec user process caused “exec format error” raspberry
[英]Golang + Linux + Docker error : standard_init_linux.go:211 : no such file or directory
这不是重复的,因为尽管错误相同,但我的用例与其他用例不同。
我正在编译 go 应用程序以在 docker 上部署:
然而,
当我在我的 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:在构建时使用CGO_ENABLED=0
或添加
RUN apk add --no-cache libc6-compat
到您的Dockerfile
或者不要使用golang:alpine
要拥有所有 static 二进制可执行文件,请使用以下命令构建它:
$ CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.