我在项目的根目录下有一个文件,并且正在像这样打开它:
file, err := os.Open("file.csv")
当我制作go run main.go
时,它可以工作。当我使用dockerfile运行应用程序时,它不起作用:open fiile.csv: no such file or directory
我的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,因此也欢迎即兴表演!
最佳答案
在COPY --from=builder /build/main /app/
行中,您仅复制可执行文件。您不复制应用程序目录。将该行替换为COPY --from=builder /build /app/
下面,我提供了一个有关如何编写此Dockerfile的示例。以下是一些关键更改。
WORKDIR
指令之前定义COPY
,这样就不必两次写入目录名称。这很有用,因为如果您要更改应用程序目录,则只需更改一次(这意味着发生错误的可能性较小)。 COPY
代替ADD
。 Dockerfile reference表示首选COPY
。 RUN mkdir /build
或WORKDIR
之前不必使用COPY
。如果目录不存在,则后两个指令将创建目录。 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"]
关于docker - 无法使用dockerfile golang打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63863717/