我正在构建一个 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 的默认构建设置)构建您的应用程序 - 并将该可执行文件移植到没有兼容库支持(glibc
、dns
解析器等)的 docker 映像。
为了确保您的构建不依赖任何外部库 - 静态绑定所有依赖项 - 然后可以部署到SCRATCH
docker 映像或-在构建阶段busybox
禁用:CGO
RUN CGO_ENABLED=0 go build -o goapp .

慕姐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
。
- 2 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消