首页 > 解决方案 > 在 docker-compose 文件中访问 env 文件变量

问题描述

我有一个环境文件,其中包含一个名为Database_User.

在我的 docker-compose 中,我有这个:

services:
  database:
    container_name: postgres
    hostname: db
    image: postgres:12-alpine
    environment:
      - POSTGRES_USER=${Database_User}
   ports:
      - "54321:5432"
   env_file: project/myproject/.env

但是,我收到一个错误:

未设置 Database_User 变量。默认为空字符串。

标签: dockerdocker-composedockerfile

解决方案


要做到这一点,正确理解environmentenv_file属性与.env文件之间的区别很重要:

  • environmentenv_file让您指定要在容器中设置的环境变量:
    • environment您可以在docker-compose.yml
    • env_file您一起从该文件中隐式导入所有变量
    • 两者混合在同一个服务上是不好的做法,因为它很容易导致意外行为
  • .env文件被加载到可以使用它 的自身docker-compose 环境中docker-compose

因此,您当前的配置不会像您认为的那样做:

env_file: project/myproject/.env

将该文件加载到容器.env的环境中,而不是. 因此不会为变量替换设置:docker-composeDatabase_User

environment:
  - POSTGRES_USER=${Database_User}

此处的解决方案:env_file从您的目录中删除docker-compose.yml并放置.env在您开始的同一目录中docker-compose。或者,您可以通过带有标志的路径指定.env--env-file文件:

docker-compose --env-file project/myproject/.env up

推荐阅读