2016-12-14 10 views
0

docker-compose.yml内のenv_file設定で狂ってしまいます。 ファイル名を.envとし、プロジェクトのルートに置くとすべて正常に動作します。このenvファイルを持つ主なポイントは、私が設定した複数の環境(dev、staging、production)を持つことでした。 すぐに私のファイルの名前を変えてください(例えば、dev.envをenvフォルダに入れてください)、それを私のdocker-composeファイルの中に読み込もうとすると動作しません。docker-composeは、yamlファイルに定義されている追加のenv-fileをロードしません。

私は事を明確にする簡単な例を作ります。 簡単にするために、私は1つの変数DC_DOCKERFILEを使用します。ここでは、ロードするドッカーファイルを定義します。

ファイル:ルートフォルダ内.env

COMPOSE_PROJECT_NAME=test 
DC_DOCKERFILE=./Dockerfile.bash.dev 

ファイル:docker-compose.yml

version: "2" 

services: 
    bash: 
    build: 
     context: . 
     dockerfile: ${DC_DOCKERFILE} 

docker-compose configすべてがクールであることを示し、同様な作品を構築:

networks: {} 
services: 
    bash: 
    build: 
     context: /devops/myproject 
     dockerfile: ./Dockerfile.bash.dev 
version: '2.0' 
volumes: {} 

を今私を驚かせる点:

  • env_file: ./env/dev.env

私のドッキングウィンドウ-compose.yml内部のenvコンテンツのルックスを追加
  • を./env/dev.envするプロジェクト
  • 移動.envのルートにフォルダを作成しENV上記のように私はコンテンツを再度投稿しません。

    私の新しいdocker-compose.yml

    version: "2" 
    
    services: 
    
        bash: 
        env_file: ./env/dev.env 
        build: 
         context: . 
         dockerfile: ${DC_DOCKERFILE} 
    

    のみenv_file設定を追加、変更します。

    と今私docker-compose configは私にこれを与える:

    networks: {} 
    services: 
        bash: 
        build: 
         context: /devops/myproject 
         dockerfile: '' 
        environment: 
         COMPOSE_PROJECT_NAME: test 
         DC_DOCKERFILE: ./Dockerfile.bash.dev 
    version: '2.0' 
    volumes: {} 
    

    は何を言いますか?ハックは私のドッカーファイル設定ですか?もちろんdocker-compose build

    はあまりにも好きではないとして気になる:変数がロードされますが、何らかの形で割り当てられていない取得

    docker-compose build --force-rm --no-cache                     
    WARNING: The DC_DOCKERFILE variable is not set. Defaulting to a blank string. 
    Building bash 
    ERROR: Cannot locate specified Dockerfile: Dockerfile 
    

    。 私はそれを取得しないでください。 私は多分間違っています。私はdocker-compose.ymlファイルの中にドッカー作成用のenvファイルを使用できません。ドッカーの作成パラメータなどで最初にロードする必要があることを意味しますが、時間を過ごすと、内部にロードできるかどうかを知りたいのです:)

    ありがとうございました。オープンソースと素晴らしいコミュニティ。

    平和アウト

  • 答えて

    1

    .envファイルが実行されているフォルダのドッキングウィンドウ-コンコマンドに存在する場合、これらの環境変数がドッキングウィンドウ・コン実行や変数置換のための環境変数として使用されています。 (https://docs.docker.com/compose/env-file/)。

    サービスにenv_fileオプションを定義すると、サービスは環境変数としてファイルからこれらの変数を取得し、それらは変数置換に使用されません。

    +0

    hi lauri、あなたの答えをありがとう。これは、私が必要とするものを行うためのenvファイルを1つしか持てないことを意味しますか?ベストプラクティスを使用してさまざまな環境をどのように処理するのですか?私は自分の変数を動的にすることができ、シェルのenvなどに応じて変数を設定できますが、正しいことをする上でドッカーの方法を学びたいだけです。ありがとうございます – bin2hex

    +0

    はい、ドキュメントに基づいて1つのenvファイルしか作成できません。 – Lauri

    +0

    ご協力いただきありがとうございます! – bin2hex

    関連する問題