指定docker compose使用的环境文件

指定docker compose使用的环境文件,docker,docker-compose,Docker,Docker Compose,是否可以指定docker compose用于变量替换的env文件?目前它默认为“.env”,但我有不同风格的compose文件,它们应该有不同的env。您可以使用继承来实现这一点。如果您有一个用于设置环境的“基本”服务,那么所有其他服务都可以从该服务继承 例如: version: "2" services: base: env_file: - my_env.txt web: extends: service: base image: f

是否可以指定docker compose用于变量替换的env文件?目前它默认为“.env”,但我有不同风格的compose文件,它们应该有不同的env。

您可以使用继承来实现这一点。如果您有一个用于设置环境的“基本”服务,那么所有其他服务都可以从该服务继承

例如:

version: "2"

services:
  base:
    env_file:
      - my_env.txt

  web:
    extends:
      service: base
    image: foo

  database:
    extends:
      service: base
    image: foo-db
上面的示例将所有内容都放在同一个文件中,但您也可以将其拆分为多个文件,其中
base
服务将驻留在
base.yaml
文件中。只需将
文件:base.yaml
添加到
扩展部分。请看

我使用这种方法为所有容器设置代理变量。我有一个
proxy.yaml
文件,它定义了一个
proxy-app
服务,该服务从shell中提取代理环境变量。我的所有真实服务都扩展了代理应用程序服务,从而从该服务继承了环境设置。

根据,现在可以加载环境文件(与每个服务文件相反),docker compose将在启动任何服务之前导出此环境文件中定义的环境变量,然后可以在docker-compose.yml配置文件本身中使用它们:

version: "3.7"
services:
  
  node:
    environment:
      APP_ENV: "${APP_ENV}"
      NODE_ENV: "${NODE_ENV}"
    ports:
      - "${HOST_EXPOSED_NODEJS_DEBUG_PORT}:9229"
    volumes:
      - type: bind
        source: ./project
        target: /var/www/project
        read_only: false
由于还可以使用命令行参数
--env file
env_file
docker-compose.yml变量指定自定义.env文件(遗憾的是,目前无法指定)

指定用于容器而非容器构建的env文件。要为构建本身设置不同的文件(例如alt.env),请使用以下命令:

env $(cat alt.env) docker-compose up --build

我找到了这个,但似乎每个容器都需要env_文件。。是否可以为整个docker compose文件全局设置它,从而覆盖默认的.env?注意:在docker compose v3和Up中不起作用这在docker compose v3+中不起作用,因为每个服务必须具有定义的映像或生成上下文。记录和讨论