【问题标题】:cannot open file using dockerfile golang无法使用 dockerfile golang 打开文件
【发布时间】:2020-09-12 18:39:00
【问题描述】:

我的项目根目录上有一个文件,我打开它是这样的:

    file, err := os.Open("file.csv")

当我创建go run main.go 时,它可以工作。当我使用 dockerfile 运行应用程序时,它不起作用:

打开 file.csv:没有这样的文件或目录

我的 dockerfile 是这样的:

FROM golang:alpine as builder
RUN mkdir /build 
ADD . /build/
WORKDIR /build 
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .
FROM scratch
COPY --from=builder /build/main /app/
WORKDIR /app
CMD ["./main"]

我不习惯 dockerfiles,所以也欢迎任何即兴表演!

【问题讨论】:

  • csv 位于哪个目录,如果 /build/ 那么您需要确保复制该目录,而不仅仅是主目录?另外,请确保 .dockerignore 没有任何干扰。

标签: docker go dockerfile


【解决方案1】:

COPY --from=builder /build/main /app/ 行中,您只需复制可执行文件。您不复制应用程序目录。将该行替换为COPY --from=builder /build /app/

下面我提供了一个如何编写这个 Dockerfile 的示例。以下是一些关键变化。

  • COPY 指令之前定义WORKDIR,这样您就不必两次写入目录名称。这很有帮助,因为如果您想更改应用目录,只需更改一次(这意味着出现错误的可能性更小)。
  • 使用COPY 而不是ADDDockerfile reference 表示首选COPY
  • 您不必在使用WORKDIRCOPY 之前使用RUN mkdir /build。如果目录尚不存在,最后两条指令将创建该目录。
FROM golang:alpine as builder
WORKDIR /build
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .
FROM scratch
WORKDIR /app
COPY --from=builder /build .
CMD ["./main"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2010-12-17
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多