首页 > 解决方案 > docker-compose env 文件在 yml 中工作,但不使用命令行参数

问题描述

我有一个 docker-compose 文件,如下所示:

version: '3.8'
services:
    scheduler:
        image: apache/airflow
        command: scheduler
        restart: on-failure
        env_file:
            - .env
        volumes:
            - ./dags:/opt/airflow/dags
            - ./logs:/opt/airflow/logs
    webserver:
        image: apache/airflow
        entrypoint: ./scripts/entrypoint.sh
        restart: on-failure
        depends_on:
            - scheduler
        env_file:
            - .env
        volumes:
            - ./dags:/opt/airflow/dags
            - ./logs:/opt/airflow/logs
            - ./scripts:/opt/airflow/scripts
        ports:
            - "8080:8080"

它在运行时按预期工作docker-compose up。但是,如果我env_file从 yml 中删除该选项并将其传递给 CLI - docker-compose --env-file .env up,则它不会从文件中选择环境变量的值。

标签: dockerdocker-composeenvironment-variablesairflow

解决方案


发生这种情况是因为--env-filein CLI 和env_filein service 部分并不完全相同。

前者实际上是 compose 将用于替换 docker-compose.yml 中的变量的文件规范(默认值为 .env)。

后者指定将加载变量并将其传递给服务容器的文件。

是的,这有点令人困惑。

参考:

阅读这个这个


推荐阅读