【问题标题】:How to pass .env file to docker image in a Go project?如何将 .env 文件传递​​给 Go 项目中的 docker 映像?
【发布时间】:2021-05-02 11:25:56
【问题描述】:

我的 Go 项目层次结构是这样的:

主要功能:

func main() {
    path, _ := os.Getwd()
    err := godotenv.Load(filepath.Join(path, ".env"))
    if err != nil {
        log.Fatal("Error loading .env file")
    }
    server.Init()
}

这是我的docker 文件内容:

FROM golang:alpine AS build-env
LABEL MAINTAINER "Amit Pal <amit.pal@fynchmobility.com>"
ENV GOPATH /go
WORKDIR /go/src
COPY . /go/src/gothamcity
RUN cd /go/src/gothamcity && go build .

FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk*
WORKDIR /app
COPY --from=build-env /go/src/gothamcity/gothamcity /app

EXPOSE 8080

ENTRYPOINT [ "./gothamcity" ]

我运行了以下命令来构建和运行 docker 镜像:

docker build -t gcr.io/${PROJECT_ID}/gothamcity:v1.0 .
docker run -ti gcr.io/miles-ee458/gothamcity:v1.0   

我得到了错误:

2021/01/28 14:34:46 Error loading .env file

我在这里做错了什么?如何将 .env 文件传递​​给 docker 映像并执行它?

还有,COPY . /go/src/gothamcity不是把整个项目复制到docker镜像吗?

【问题讨论】:

  • .env 不是变量,而是文件。您的代码在当前工作目录中查找该文件。确保它在容器工作目录中。
  • @JimB 是的,我知道这是一个文件,但想法是将所有环境变量从这里复制到 docker 映像?
  • 您可以随意设置环境变量,但代码正在寻找特定文件,您需要提供该文件。如果你只想设置环境变量,那么不要使用这段代码。
  • 好的理解,当我使用COPY . /go/src/gothamcity这一行时,它是否只复制.go文件?它应该假设复制整个工作目录
  • COPY 复制文件,它不以任何方式特定于go

标签: docker go kubernetes environment-variables dockerfile


【解决方案1】:

COPY . /go/src/gothamcity 只复制 .env 来构建容器。您必须像这样将其显式复制到您的主容器中:

FROM golang:alpine AS build-env
LABEL MAINTAINER "Amit Pal <amit.pal@fynchmobility.com>"
ENV GOPATH /go
WORKDIR /go/src
COPY . /go/src/gothamcity
RUN cd /go/src/gothamcity && go build .

FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk*
WORKDIR /app
COPY --from=build-env /go/src/gothamcity/gothamcity /app
COPY .env /app

EXPOSE 8080

ENTRYPOINT [ "./gothamcity" ]

原因是当您说“FROM alpine”时,它变成了一个全新的空白容器。这就是multi-stage builds 的工作方式。

【讨论】:

  • 感谢您的回答。它确实对我有用。为什么COPY --from=build-env /go/src/gothamcity/gothamcity /app 没有复制.env 文件?
  • 因为它只复制应用程序二进制文件
猜你喜欢
  • 2021-10-16
  • 2020-05-01
  • 2020-10-29
  • 2021-08-03
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多