为了账号安全,请及时绑定邮箱和手机立即绑定

Golang + Linux + Docker 错误:standard_init_linux.go

Golang + Linux + Docker 错误:standard_init_linux.go

Go
侃侃尔雅 2022-06-13 15:58:20
这不是重复的,因为尽管错误相同,但我的用例与其他用例不同。我正在编译一个 go 应用程序以在 docker 上部署:最新的arch linux最新的 docker 版本,golang:alpine 镜像尝试使用 go 版本 1.13.3 和 1.14.4 linux amd64我没有 bash 脚本或错误的文件结尾。整个项目都写在这台 Linux 机器上我可以部署一个只有 fmt 打印且没有任何错误的空 go 应用程序然而,当我在我的 OSX 机器上构建它并将其发送到 linux 时,我可以将该可执行文件部署到 docker 而不会出现任何错误OSX 莫哈韦最新的码头工人去 1.13.3GOOS = linux错误 :standard_init_linux.go:211: exec user process caused "no such file or directory"
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

当你编译你的 go 应用时cgo,编译器会动态链接到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

要拥有一个全静态二进制可执行文件,请使用以下命令构建它:

$ CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' .


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 524 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号