docker - 无法使用dockerfile golang打开文件

标签 docker go dockerfile

我在项目的根目录下有一个文件,并且正在像这样打开它:

    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代替ADDDockerfile reference表示首选COPY
  • 使用RUN mkdir /buildWORKDIR之前不必使用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/

    相关文章:

    docker - docker pull等效于kubectl

    mongodb - 当我运行 docker compose 时,我的 golang(摄取)容器无法显示 "Error establishing Mongo session"

    testing - 使用 Go 的 "testing/quick"包生成随机的数字和字母字符串

    docker - 将ARG中的多个文件指定为Dockerfile中的COPY

    python - Selenium Firefox webdriver 适用于从 Ubuntu 构建的图像,但不适用于从 Debian 构建的图像

    docker - 每次必须设置eval $(dinghy env)。无法连接到Docker守护程序。 docker守护程序是否在此主机上运行?

    go - 等待 sync.Waitgroup 延迟

    docker - 在 Docker Alpine 镜像上运行时,带有 DB2 的 ASP.NET Core 在首次请求时退出并显示代码 139

    Docker COPY 文件使用 glob 模式?

    docker - Docker中的webpack-dev-server