我正在按照https://docs.docker.com/language/golang/build-images/的指南学习如何最好地为Go应用程序进行多级Docker构建。我克隆了回购:
git clone https://github.com/olliefr/docker-gs-ping我在指南底部附近运行命令来构建图像:
docker build -t docker-gs-ping:multistage -f Dockerfile.multistage .我还运行了自己的命令,从图像中运行一个临时容器:
docker run --rm docker-gs-ping:multistage这个效果很好。我在我的终端中看到应用程序的输出。但是,我想将指南中的无分辨图像(gcr.io/distroless/base-debian10)中的第二层映像切换到alpine:3。当我做了这个更改,构建了一个新映像,并试图使用上面的相同命令运行新映像时,我得到了一个关于用户不存在的错误:
docker: Error response from daemon: unable to find user nonroot: no matching entries in passwd file.这对我来说很有意义。听起来,无分辨图像有这个用户,而阿尔卑斯图像却没有,所以我从Dockerfile中删除了USER nonroot:nonroot。因此,在这里,我的Dockerfile的下半部分如下所示:
##
## Deploy
##
FROM alpine:3
WORKDIR /
COPY --from=build /docker-gs-ping /docker-gs-ping
EXPOSE 8080
ENTRYPOINT ["/docker-gs-ping"]然后,我构建了一个新映像,并尝试使用上面的相同命令运行新映像。这一次,我得到了以下错误:
standard_init_linux.go:228: exec user process caused: no such file or directory我很难排除这个错误。为什么这样切换我的基本图像会导致这个错误?
发布于 2022-02-25 07:19:23
我的基本图像不同步。用于构建二进制文件的阶段所使用的基本图像也需要高寒。如果我将指南中该Dockerfile的第一行从FROM golang:1.16 AS build切换到FROM golang:1.16-alpine AS build,它就能工作。
https://stackoverflow.com/questions/71262223
复制相似问题