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

Docker golang busybox“没有这样的文件或目录”错误

Docker golang busybox“没有这样的文件或目录”错误

Go
湖上湖 2022-07-11 17:20:29
我正在构建一个 golang 微服务的多级 Docker 映像,我想使用busybox作为基础映像使其非常薄,以运行最终的可执行文件。该图像已正确构建,但是当我运行它时,出现此错误:standard_init_linux.go:211: exec user process caused "no such file or directory"我正在使用我的 Ubuntu 笔记本电脑,因此正如许多其他问题所报告的那样,此错误与 Windows 操作系统无关。这是我的形象。# build stageFROM golang:1.15.3 AS build-stageRUN mkdir /buildADD . /build/WORKDIR /buildRUN go mod downloadRUN go test ./...RUN go build -o goapp .# final stageFROM busyboxWORKDIR /appCOPY --from=build-stage /build/goapp /app/CMD ["./goapp"]我的项目文件夹的一个非常简化的版本可能是:project├── Dockerfile├── go.mod├── go.sum├── main.go└── other-packages
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

您正在使用CGO_ENABLED=1(这是 Go 的默认构建设置)构建您的应用程序 - 并将该可执行文件移植到没有兼容库支持(glibcdns解析器等)的 docker 映像。

为了确保您的构建不依赖任何外部库 - 静态绑定所有依赖项 - 然后可以部署到SCRATCHdocker 映像或-在构建阶段busybox禁用:CGO

RUN CGO_ENABLED=0 go build -o goapp .


查看完整回答
反对 回复 2022-07-11
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我猜这两个图像的 libc 之间存在差异。在busybox图片的描述中介绍过,有好几种libc variants,用图片标签来区分。

的 libcgolang:1.15.3是 glibc (它是FROM对应的版本debian:buster),所以你应该busybox:glibc在你的最后阶段使用。

默认busybox:latest使用uclibc. 它们是不相容的。检查 和 的 sha256busybox:latest摘要busybox:uclibc


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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