为什么我的 Go 应用程序会因 Docker 容器内的“没有这样的文件或目录”而失败?

我有一个 Go 1.18 应用程序,它在我的 WSL2 Ubuntu 中运行没有问题,但无法在 Docker 容器中运行并显示错误消息exec /app: no such file or directory。


我的 Dockerfile(稍微改编自另一个没有问题的 Go 1.12 应用程序)是:


FROM golang:1.18-alpine AS build


WORKDIR /app


COPY go.mod ./

COPY go.sum ./

RUN go mod download


COPY source/*.go ./


RUN go build -o /app


FROM gcr.io/distroless/static-debian11


COPY --from=build /app /app


USER nonroot:nonroot


CMD ["/app"]

构建它没有显示错误。我尝试添加GOOS=linux和GOARCH=amd64构建,--platform linux/amd64但没有任何区别(我认为应该没有必要?)。我从 Distroless 切换到 Debian,同样的问题。


该文件/app存在 (11 mb, 755)。file /app给出这个输出:


app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, Go BuildID=UsV_orwX-S3Rwh16P1VH/6u2iHufDhnUYUkHBp0rE/2xn48wuW047ZRbQ7qPIy/ihQgooFxjsMgMzYGE-8h, not stripped

我不知道我哪里出错了。这里的问题是什么?


蝴蝶不菲
浏览 166回答 1
1回答

沧海一幻觉

似乎是由使用go-ping/ping引起的。将构建镜像切换到golang:1.18(不是 Alpine)和最终镜像来gcr.io/distroless/base-debian11解决这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go