【问题标题】:Having trouble setting .env variables in docker compose file在 docker compose 文件中设置 .env 变量时遇到问题
【发布时间】:2020-11-07 13:53:00
【问题描述】:

我正在尝试遵循 Docker 文档和 SO 建议,但在尝试“docker-compose up db”时仍然遇到“变量未设置”错误。有人可以检查我的 .env 和 yaml 文件吗?两者都在同一个目录中,但似乎 yml 没有读取 .env???

.env:

FS_NAME=MY_BLOG_NAME
FS_REGION=us-east-2
DB_HOST=localhost
DB_USER=postgres
DB_PASS=$$323MY_PASS$&84
DB_NAME=postgres

docker-compose.yml:

version: '3.7'
volumes:
    db_data:

x-shared_environment: &shared_environment
   LOG_LEVEL: ${LOG_LEVEL:-debug}
   DATABASE_HOST: ${DB_HOST}
   DATABASE_NAME: ${DB_NAME}
   DATABASE_USERNAME: ${DB_USERNAME}
   DATABASE_PASSWORD: ${DB_PASSWORD}

services:
  app:
    image: MY_BLOG_NAME:latest
    build:
      context: .
    environment:
      <<: *shared_environment
      FS_NAME: ${FS_NAME}
      FS_REGION: ${FS_REGION}
    depends_on:
    - db
    ports:
      - '8080:8080'
      
db:
    image: postgres:12.2-apline
    volumes:
        -db_data/var/lib/postrgresql/data/pgdata
    environment:
        PGDATA: /var/lib/postgresql/data/pgdata
        POSTGRES_USER: {DB_USERNAME}
        POSTGRESS_PASSWORD: {DB_PASSWORD}
        POSTGRES_DB: {DB_NAME}
        POSTGRESS_PASSWORD: {DB_PASSWORD}
    ports:
        -'5432:5432'

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您需要指定.env文件的目录,为每个服务添加env_file配置。

    https://docs.docker.com/compose/environment-variables/

    例如:

    db:
        image: postgres:12.2-apline
        volumes:
            -db_data/var/lib/postrgresql/data/pgdata
        env_file: 
            - ./.env
        environment:
            PGDATA: /var/lib/postgresql/data/pgdata
            POSTGRES_USER: {DB_USERNAME}
            POSTGRESS_PASSWORD: {DB_PASSWORD}
            POSTGRES_DB: {DB_NAME}
            POSTGRESS_PASSWORD: {DB_PASSWORD}
        ports:
            -'5432:5432'
    

    【讨论】:

    • 我实际上得到了正确的环境变量(但也添加了你的建议)。一旦 env 变量修复......我在运行 docker-compose up db 时的最终错误是:``` 错误:Compose 文件 './docker-compose.yml' 无效,因为:顶级属性“db”无效。此 Compose 文件的有效顶级部分是:版本、服务等。注意:为了使 env 变量正常工作,我将原始版本从 3.7 更改为 3.8(以支持我最新的 docker v 安装)。知道顶级属性数据库错误是什么吗?
    • 注意:我没有为服务添加单独的 env_file,因为我的 .env 文件包含 FS、DB 和 AWS 的所有变量。那么“ - ./.env”就足够了吗?对顶级数据库错误有什么想法吗?
    • 你不能在文件的顶层定义env_file,它应该为每个服务单独配置stackoverflow.com/questions/48154093/…
    • 我想通了...“db”需要缩进...感谢一路上的帮助。 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2018-02-11
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多