Docker Compose YAMLの環境変数を.envに変換する

docker-compose.ymlで定義された環境変数を抽出し、スタンドアロンの.envファイルに変換します。Docker Composeで使用されるリスト形式とマッピング形式の両方を解説します。

Real-World Configs

詳細な説明

Docker Composeはサービス内の環境変数定義に2つの形式をサポートしており、どちらもスタンドアロンの.envファイルに抽出できます。この変換を理解することは、Docker環境全体の設定管理に不可欠です。

Docker Composeの環境変数(リスト形式):

services:
  api:
    image: myapp:latest
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://user:pass@db:5432/myapp
      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=super-secret-key
      - LOG_LEVEL=info
      - CORS_ORIGINS=https://app.example.com,https://admin.example.com

Docker Composeの環境変数(マッピング形式):

services:
  api:
    image: myapp:latest
    environment:
      NODE_ENV: production
      DATABASE_URL: "postgres://user:pass@db:5432/myapp"
      REDIS_URL: "redis://redis:6379"
      JWT_SECRET: super-secret-key
      LOG_LEVEL: info
      CORS_ORIGINS: "https://app.example.com,https://admin.example.com"

抽出された.envファイル:

NODE_ENV=production
DATABASE_URL=postgres://user:pass@db:5432/myapp
REDIS_URL=redis://redis:6379
JWT_SECRET=super-secret-key
LOG_LEVEL=info
CORS_ORIGINS=https://app.example.com,https://admin.example.com

次にdocker-compose.ymlで参照します:

services:
  api:
    image: myapp:latest
    env_file:
      - .env

重要な変換の詳細:

  1. リスト形式(- KEY=VALUE は直接変換可能です -- 各エントリは既にENV構文です。- プレフィックスを削除するだけです。
  2. マッピング形式(KEY: VALUE はYAMLのコロン+スペース区切りを等号に変換する必要があります。値に特殊文字が含まれる場合はクォートが必要になる場合があります。
  3. 混合ソース。 Docker Composeはenvironment:env_file:、シェル環境変数を組み合わせることができます。environment:の値はenv_file:の値を上書きします。

マルチサービスの抽出: docker-compose.ymlに複数のサービスがある場合、別々の.envファイルが望ましい場合があります:

# api.env
NODE_ENV=production
JWT_SECRET=super-secret-key

# db.env
POSTGRES_DB=myapp
POSTGRES_PASSWORD=dbpassword

Docker ComposeにおけるYAML固有の注意点:

  • クォートなしのyes/no値はYAMLによりブールとしてパースされ、文字列としてではありません。常にクォートしてください: FEATURE_FLAG: "yes"
  • ポートのような値(例:3000:3000)は文字列としてクォートする必要があります。
  • $を含む値はエスケープ($$)が必要であるか、変数置換として解釈されます。

ユースケース

複雑なマルチサービスのdocker-compose.ymlファイルから環境変数を集約した.envファイルに抽出し、シークレット管理を容易にし、機密値のバージョン管理へのコミットを避ける場合。

試してみる — YAML ↔ ENV Converter

フルツールを開く