Docker golang busybox "no such file or directory" 错误

Docker golang busybox "no such file or directory" error

我正在构建 golang 微服务的多级 Docker 映像,我想使用 busybox 作为最终可执行文件的基础映像,使其非常薄。 图像已正确构建,但是当我 运行 它时,我收到此错误:

standard_init_linux.go:211: exec user process caused "no such file or directory"

我正在使用我的 Ubuntu 笔记本电脑,所以这个错误与 Windows OS 无关,正如许多其他问题报告的那样。

这是我的头像。

# build stage
FROM golang:1.15.3 AS build-stage

RUN mkdir /build
ADD . /build/
WORKDIR /build

RUN go mod download
RUN go test ./...
RUN go build -o goapp .

# final stage
FROM busybox
WORKDIR /app
COPY --from=build-stage /build/goapp /app/

CMD ["./goapp"]

我的项目文件夹的一个非常简化的版本可能是:

project
├── Dockerfile
├── go.mod
├── go.sum
├── main.go
└── other-packages

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

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

RUN CGO_ENABLED=0 go build -o goapp .

我想这两个图像的 libc 之间存在差异。 busybox镜像description中介绍,有几个libc variants,用镜像标签区分

golang:1.15.3的libc是glibc(FROM对应debian:buster的版本),所以最后阶段应该使用busybox:glibc

默认 busybox:latest 使用 uclibc。他们是不相容的。检查 busybox:latest and busybox:uclibc.

的 sha256 摘要