1. ホーム
  2. docker

[解決済み] docker-compose.ymlで環境変数を再利用する

2022-11-25 20:21:32

質問

複数のコンテナで共有している環境変数を再利用することは可能ですか?

この例に示すように、重複を避けるということです。

version: '2'

services:

  db:
    image: example/db
    ports:
      - "8443:8443" 
    container_name: db
    hostname: db
    environment:
      - USER_NAME = admin 
      - USER_PASSWORD = admin 

svc:
  image: example/svc
  depends_on:
    - db
  ports:
    - "9443:9443"
  container_name: svc
  hostname: svc
  environment:
    - DB_URL = https://db:8443
    - DB_USER_NAME = admin
    - DB_USER_PASSWORD = admin 

どのように解決するのですか?

この extends オプションも良いのですが、それは はサポートされていません。 3.x ファイルを構成します。他の方法としては

  1. 拡張フィールド (コンポーズファイル 3.4+)

    3.4+のコンポジットファイルを使用できる場合、拡張フィールドがおそらく最良の選択肢です。

    docker-compose.yml

     version: '3.4'
    
     x-common-variables: &common-variables
       VARIABLE: some_value
       ANOTHER_VARIABLE: another_value
    
     services:
       some_service:
         image: someimage
         environment: *common-variables
    
       another_service:
         image: anotherimage
         environment:
           <<: *common-variables
           NON_COMMON_VARIABLE: 'non_common_value'
    
    
  2. env_file ディレクティブ

    docker-compose.yml

     version: '3.2'
    
     services:
       some_service:
         image: someimage
         env_file:
           - 'variables.env'
    
       another_service:
         image: anotherimage
         env_file:
           - 'variables.env'
    
    

    変数.env

     VARIABLE=some_value
     ANOTHER_VARIABLE=another_value
    
    
  3. .env ファイル プロジェクトルートにある (または実際のコンポジット環境での変数)

    .envファイルの変数は、サービスの設定から参照することができます。

    docker-compose.yml

     version: '3.2'
    
     services:
       some_service:
         image: someimage
         environment:
           - VARIABLE
    
       another_service:
         image: anotherimage
         environment:
           - VARIABLE
           - ANOTHER_VARIABLE
    
    

    .環境

     VARIABLE=some_value
     ANOTHER_VARIABLE=another_value