为了账号安全,请及时绑定邮箱和手机立即绑定

ENV 变量不是通过 godotenv Docker

ENV 变量不是通过 godotenv Docker

Go
紫衣仙女 2022-08-09 20:44:33
我有一个用Go编写的Web应用程序,dockerized并使用gomod。我无法让它读取环境变量。运行 docker-compose 时,始终返回“获取 env 时出错,未通过”我正在使用godotenv来尝试这样做。以下是我的实现。我无法为我的生活找出哪里出了问题。如果有人能看到我错过的东西,你将挽救一条生命。main.go,.env,docker-compose.yml和Dockerfile都在项目的根目录中。main.gofunc 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"))}.envMY_ENV=thisismyenvvariableDB_HOST=testdata123DB_DRIVER=testdata123DB_USER="testdata123"DB_PASSWORD=testdata123DB_NAME=testdata123DB_PORT=5432docker-compose.ymlversion: '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-stoppedvolumes:  api:  database_postgres:                  # Networks to be created to facilitate communication between containersnetworks:  startup_template:    driver: bridge
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

如果你已经在使用 你的,你真的不需要godotenv,因为环境已经从docker-compose传下来了:env_filedocker_compose.yml


version: '3'


services:

    app:

        image: busybox:latest

        command: sh -c 'echo "Hello $$USER!"'

        env_file:

            - .env

# .env

USER=user1

$ docker-compose up

Recreating test_app_1 ... done

Attaching to test_app_1

app_1  | Hello user1!

test_app_1 exited with code 0

这比尝试将 .env 文件复制到容器中更好,因为这意味着您可以传递环境变量,而无需在每次;)


如果你仍然想使用godotenv,我发现通过简单地从Dockerfile中取消注释该行,.env文件可以正确加载(因为godotenv在目录中找到了它,而如果它被注释,它就不会)。COPY --from=builder /app/.env .


$ docker-compose up

Starting template_123 ... done

Attaching to template_123

template_123 | We are getting the env values

template_123 | thisismyenvvariable

template_123 exited with code 0

如果你想让它与你的文件系统保持同步,你需要使用一个卷来链接你的.env和文件系统上的那个,或者正如我所说,完全放弃,因为它在你的情况下并不是很有用。godotenv


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号