gpt4 book ai didi

docker - 在 `go build` 命令中包含 .env 文件

转载 作者:IT王子 更新时间:2023-10-29 01:56:28 24 4
gpt4 key购买 nike

我有以下 Dockerfile,它为我的 Go 项目构建图像。

FROM golang:1.11.2-alpine3.8 as go-compile

RUN apk update && apk add git
RUN mkdir /app
COPY src/ /app
WORKDIR /app

RUN go get github.com/joho/godotenv

RUN go build -o main .

FROM alpine:latest

RUN mkdir /app
COPY --from=go-compile /app/main /app/main

CMD ["/app/main"]

图像构建,但我的“.env”文件未包含在 Docker 图像中。

我尝试使用 COPY src/.env/app/.envsrc 文件夹中的“.env”复制到图像中,但仍然Go 代码无法找到/读取文件。

我如何包含“.env”文件,或者实际上任何其他非 Go 文件?

最佳答案

您不能在 go build 过程中包含非 go 文件。 Go 工具不支持将任意文件“嵌入”到最终的可执行文件中。

然后你应该使用 go build 来构建你的可执行文件,任何非 go 文件,例如模板、图像、配置文件需要可供该可执行文件使用。那是;可执行文件需要知道非 go 文件在运行 go 程序的主机的文件系统中的位置,然后根据需要打开和读取它们。因此,忘记将 .env 嵌入到 main 中,而是将 .envmain 一起复制到相同的位置你想运行 main

然后你的 dockerfile 的问题是目标主机只从 go-compile 复制最终的可执行文件 (COPY --from=go-compile/app/main/app/main ),它不会复制 go-compile 镜像中存在的任何其他文件,因此您的 main 应用无法访问 .env,因为它们不在同一主机上.


正如@mh-cbon 在评论中指出的那样,确实存在将非 go 文件嵌入 go 二进制文件的第 3 方解决方案,其中之一是 gobuffalo/packr .

关于docker - 在 `go build` 命令中包含 .env 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com