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 摘要
我正在构建 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
.