登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-05 11:18:34 258浏览 收藏

golang学习网今天将给大家带来《在 `go build` 命令中包含 .env 文件》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我有以下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 二进制文件中的第三方解决方案,其中之一是 gobuffalo/packr

今天关于《在 `go build` 命令中包含 .env 文件》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>