【问题标题】:Error in path to binary in multistage Dockerfile多级 Dockerfile 中的二进制路径错误
【发布时间】:2021-07-24 06:32:21
【问题描述】:

我在试图让我的可执行文件在多级 Dockerfile 中运行时迷失了方向。

我不断得到

"Exec user process caused: no such file or directory unknown"

与我在第一阶段构建的二进制文件的路径相关的错误,所以我知道我引用它是错误的。

谁能看出我哪里出错了? WORKDIR 参数是否也适用于构建的第二阶段?

#####################################
# PHASE 1: build an executable binary
#####################################
FROM golang:alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o server .

#####################################
# PHASE 2: build a small disk image
#####################################
FROM scratch
COPY --from=builder /app/server /app/server
EXPOSE 8000
CMD [ "/app/server" ]

【问题讨论】:

    标签: docker go dockerfile


    【解决方案1】:

    当您在没有明确关闭CGO_ENABLED 的情况下为同一台机器构建可执行文件时,它会构建动态链接的二进制文件,并且在交叉编译时它会尝试构建静态二进制文件。您可以在构建可执行文件后使用ldd <executable_path> 确认是否动态链接。

    因此,您在 alpine 基础上构建,然后将其复制到 scratch 基础上,该基础上没有这些库要动态链接。

    因此,首先构建静态二进制文件,然后复制它,它应该可以运行。看看CGO_ENABLED=0 go build -o server . 是否有效。可能还有更多,具体取决于您的代码;所以基本上你必须创建一个静态链接的可执行文件,它应该在无发行版的基础上运行良好。

    【讨论】:

    • 非常感谢!做到了。非常感激。 :)
    • 是的,太好了。你能接受答案吗?如果其他人遇到类似问题,它会帮助他们找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2019-09-30
    • 2018-08-10
    • 2015-04-17
    • 2023-03-11
    • 2019-08-16
    相关资源
    最近更新 更多