Docker-compose环境变量未设置。

8

项目树

/backend
  .env.dev
  docker-compose-dev.yml
  /project

我收到了以下警告信息:

docker-compose  -f docker-compose-dev.yml up --build # i am in the /backend directory

WARNING: The DB_USER variable is not set. Defaulting to a blank string.
WARNING: The DB_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The DB_NAME variable is not set. Defaulting to a blank string.

这意味着Docker Compose无法看到我的环境文件。我该如何修复它?
docker-compose-dev.yml
services:
  django:
    build: ./project # path to Dockerfile
    command: sh -c " 
      sleep 3 && gunicorn -w 8 --bind 0.0.0.0:8800 core_app.wsgi"
    volumes:
      - ./project:/project
      - ./project/static:/project/static
      - ./project/media:/project/media
      - ./project/logs:/project/logs
    expose:
      - 8800
    env_file:
      - ./.env.dev
    depends_on:
      - db

  
  db:
    image: postgres:13-alpine
    volumes:
      - pg_data:/var/lib/postgresql/data/
    expose: 
      - 5432
    ports:
      - "5435:5432"
    env_file:
      - ./.env.dev
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=${DB_NAME}
          .......

如何启用 env 文件?

附注: 数值被设置在文件 .env.dev 中。

DB_NAME=db_dev
DB_USER=postgres
DB_PASSWORD=passsss132132
ENV_TYPE=DEV

更新 发现这种方式可以使用。

docker-compose -f docker-compose-dev.yml  --env-file=.env.dev up 

1
你的Compose文件中数据库容器在哪里? - Manoj Tolagekar
1个回答

6
如果投诉来自于Docker(compose)本身,请尝试以下操作:
  1. ./.env.dev重命名为.env.dev
  2. 如果还没有这样做,请将.env.dev重命名为.env(默认值),并从您的compose中删除env_file条目。这肯定会起作用,然后您可以回去调查与env_file有关的问题([1])。

更新

现在我自己也面临着同样的问题——在类似的情况下尝试将my JupyterHub的变量与那些注定要进入Jupyter Notebooks的变量分离开来——我深入了解了一下Compose的.envenv_file:的作用。

正如问题中已经提到的那样,使用选项--env-file解决了该问题。这是正确的答案,用于在文件中定义docker-compose(yaml)环境变量,该文件具有不同于.env(默认值)的名称。

“docker-compose.yaml”文件中的“env_file”选项适用于正在运行的容器:只有容器可以看到这些变量。

我最近在类似的问题上发布了一个类似的答案:

[1] https://docs.docker.com/compose/env-file/


我需要两个 .env 文件(一个用于开发,一个用于生产) - mascai
没错,这是一个好的实践。我的建议“2”仅供测试目的。如果你想真正理解正在发生的事情。 - Brandt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接