繁体   English   中英

Golang + Linux + Docker 错误:standard_init_linux.go:211:没有这样的文件或目录

[英]Golang + Linux + Docker error : standard_init_linux.go:211 : no such file or directory

这不是重复的,因为尽管错误相同,但我的用例与其他用例不同。

我正在编译 go 应用程序以在 docker 上部署:

  • 最新拱linux
  • 最新docker版本,golang:alpine镜像
  • 尝试使用 go 版本 1.13.3 和 1.14.4 linux amd64
  • 我没有 bash 脚本或错误的文件结尾。 整个项目都写在这台 Linux 机器上
  • 我可以部署一个只有 fmt 打印且没有任何错误的空 go 应用程序

然而,

当我在我的 OSX 机器上构建它并将其发送到 linux 时,我可以将该可执行文件部署到 docker 而不会出现任何错误

  • OSX 莫哈韦
  • 最新 docker
  • go 1.13.3
  • GOOS=Linux

错误:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM