登录
首页 >  Golang >  Go问答

虽然无法成功加载.env文件,但仍能获得环境变量

来源:stackoverflow

时间:2024-02-10 21:09:23 260浏览 收藏

大家好,我们又见面了啊~本文《虽然无法成功加载.env文件,但仍能获得环境变量》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

这是我加载 .env 文件并设置变量的代码段。

// init executes the initial configuration.
func init() {
    // loads the file for env. variables
    if err := godotenv.load(".env"); err != nil {
        log.printf("failed to load env file: %v\n", err)
    }

    // env variables are set based values within the .env file.
    os.setenv("dbname", os.getenv("db_name"))
    os.setenv("username", os.getenv("db_username"))
    os.setenv("pw", os.getenv("db_password"))
    os.setenv("dbport", os.getenv("db_port"))
    os.setenv("server_port", os.getenv("server_port"))
    os.setenv("hostname", os.getenv("db_container_name"))
}

当我运行 docker-compose up --build server 时,尽管出现以下错误,但一切正常:

server_1  | 2022/09/07 11:44:06 failed to load env file: open .env: no such file or directory

但是,环境是以某种方式设置的。

这是我的 docker-compose.yml

version: '3.8'
services:
  db:
    image: postgres:14.1-alpine
    container_name: ${db_container_name}
    restart: always
    environment:
      - postgres_db=${db_name}
      - postgres_user=${db_username}
      - postgres_password=${db_password}
    ports:
      - ${db_port}:${db_port}
    env_file:
     - .env
    volumes:
      - db:/var/lib/postgresql/data
      - ./psql/statements/create-tables.sql:/docker-entrypoint-initdb.d/create_table.sql
  server:
        build:
          context: .
          dockerfile: dockerfile
        env_file: .env
        depends_on:
         - ${db_container_name}
        networks:
           - default
        ports:
         - ${server_port}:${server_port}
volumes:
  db:
    driver: local

还有我的 go 应用程序 dockerfile

FROM golang:1.18
WORKDIR /src
COPY go.sum go.mod ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /bin/app .

FROM alpine
COPY --from=0 /bin/app /bin/app
ENTRYPOINT ["/bin/app"]

我更改了 dockerfile 的一些内容,但出现了不同的错误。出现这样的问题的原因可能是什么?因为它无法加载但仍然可以工作。


正确答案


看起来环境变量是由 docker compose 从 yaml 文件中提到的 .env 文件设置的,其中 env_file: .env

open .env:从 go 应用程序内部打印没有此类文件或目录 ,因为 .env 文件在容器内不可用,在 Dockerfile 中没有 COPY/ADD 命令。

今天关于《虽然无法成功加载.env文件,但仍能获得环境变量》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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