fba*_*ril 0 go docker dockerfile
我在项目的根目录上有一个文件,我打开它是这样的:
file, err := os.Open("file.csv")
Run Code Online (Sandbox Code Playgroud)
当我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"]
Run Code Online (Sandbox Code Playgroud)
我不习惯 dockerfiles,所以也欢迎任何即兴表演!
在该行中,COPY --from=builder /build/main /app/您只复制可执行文件。您不复制应用程序目录。将该行替换为COPY --from=builder /build /app/
下面我包含了一个如何编写这个 Dockerfile 的例子。以下是一些关键的变化。
WORKDIR在COPY指令之前定义,这样您就不必两次写入目录名称。这很有用,因为如果您想更改应用程序目录,您只需更改一次(这意味着出现错误的可能性较小)。COPY代替ADD。所述Dockerfile参考表明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"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |