ENV 变量不是通过 godotenv Docker

我有一个用Go编写的Web应用程序,dockerized并使用gomod。


我无法让它读取环境变量。


运行 docker-compose 时,始终返回“获取 env 时出错,未通过”


我正在使用godotenv来尝试这样做。以下是我的实现。我无法为我的生活找出哪里出了问题。如果有人能看到我错过的东西,你将挽救一条生命。


main.go,.env,docker-compose.yml和Dockerfile都在项目的根目录中。


main.go


func main() {

    router := mux.NewRouter()


    err := godotenv.Load()

    if err != nil {

        log.Fatalf("Error getting env, not comming through %v", err)

    } else {

        fmt.Println("We are getting the env values")

    }


    fmt.Println(os.Getenv("MY_ENV"))


}

.env


MY_ENV=thisismyenvvariable

DB_HOST=testdata123

DB_DRIVER=testdata123

DB_USER="testdata123"

DB_PASSWORD=testdata123

DB_NAME=testdata123

DB_PORT=5432


docker-compose.yml


version: '3'

services:

  app:

    container_name: template_123

    build: .

    ports: 

      - 8080:8080 

    restart: on-failure

    volumes:

      - api:/usr/src/app/

    env_file:

      - .env

    depends_on:

      - template-postgres          

    networks:

      - template



  template-postgres:

    image: postgres:latest

    container_name: startup_template_golang_db_postgres

    environment:

      - POSTGRES_USER=${DB_USER}  

      - POSTGRES_PASSWORD=${DB_PASSWORD}

      - POSTGRES_DB=${DB_NAME}

      - DATABASE_HOST=${DB_HOST} 

    ports:

      - '5432:5432'

    volumes:

      - database_postgres:/var/lib/postgresql/data

    env_file:

      - .env

    networks:

      - template

    

  pgadmin:

    image: dpage/pgadmin4

    container_name: pgadmin_container

    environment:

      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}

      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}

    depends_on:

      - template-postgres

    ports:

      - "5050:80"

    networks:

      - template

    restart: unless-stopped


volumes:

  api:

  database_postgres:                  


# Networks to be created to facilitate communication between containers

networks:

  startup_template:

    driver: bridge


紫衣仙女
浏览 100回答 1
1回答

三国纷争

如果你已经在使用 你的,你真的不需要godotenv,因为环境已经从docker-compose传下来了:env_filedocker_compose.ymlversion: '3'services:    app:        image: busybox:latest        command: sh -c 'echo "Hello $$USER!"'        env_file:            - .env# .envUSER=user1$ docker-compose upRecreating test_app_1 ... doneAttaching to test_app_1app_1  | Hello user1!test_app_1 exited with code 0这比尝试将 .env 文件复制到容器中更好,因为这意味着您可以传递环境变量,而无需在每次;)如果你仍然想使用godotenv,我发现通过简单地从Dockerfile中取消注释该行,.env文件可以正确加载(因为godotenv在目录中找到了它,而如果它被注释,它就不会)。COPY --from=builder /app/.env .$ docker-compose upStarting template_123 ... doneAttaching to template_123template_123 | We are getting the env valuestemplate_123 | thisismyenvvariabletemplate_123 exited with code 0如果你想让它与你的文件系统保持同步,你需要使用一个卷来链接你的.env和文件系统上的那个,或者正如我所说,完全放弃,因为它在你的情况下并不是很有用。godotenv
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go