我正在为go项目构建一个多阶段Dockerfile。
FROM golang:latest as builder
COPY ./go.mod /app/go.mod
COPY ./go.sum /app/go.sum
#exporting go1.11 module support variable
ENV GO111MODULE=on
WORKDIR /app/
#create vendor directory
RUN go mod download
COPY . /app/
RUN go mod vendor
#building source code
RUN go build -mod=vendor -o main -v ./src/
FROM alpine:latest
RUN apk --no-cache add ca-certificates
COPY --from=builder /app/main /app/main
WORKDIR /app/
ARG port="80"
ENV PORT=$port
EXPOSE $PORT
CMD ["./main"]
运行图像时,它会引发错误:
standard_init_linux.go:207: exec user process caused "no such file or directory"
我已验证/ app / main中存在“主要”文件。 我还尝试通过添加来赋予可执行权限
chmod +x /app/main
但仍然无法正常工作。 可能有什么问题吗?
答案 0 :(得分:1)
golang映像的“最新”版本基于debian,它使用libc。高山使用麝香。如果不使用Start-Job -ScriptBlock {& $using:command}
进行编译,则网络库将链接到libc,并且no此类文件或目录错误均指向缺少的库。您可以使用CGO_ENABLED=0
检查这些共享库链接。我能想到的一些解决方案:
ldd /app/main
CGO_ENABLED=0
FROM golang:alpine