Docker Compose はボリュームで環境変数を使用します。

Docker Compose はボリュームで環境変数を使用します。

ボリュームセクションでDocker Compose環境変数を使用する方法はありますか?

この設定を使用しましたが、動作しません。

SampleContainer:
        image: myImage:latest
        container_name: sample
        depends_on:
            - mysql-server
        restart: always
        environment:
            - 'SERVER_NAME=jingool'
        volumes:
            - /opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties

私の問題は、jingoolディレクトリがボリュームに定義されていないことです。

この問題をどのように解決できますか?

答え1

.env書き込み用のグローバル環境を読み取り用に配置したファイルを使用する必要があります。

望むより:https://docs.docker.com/compose/environment-variables/#the-env-fileこのファイルの使用方法の詳細。

その他考えられる解決策はtemplate.yml呼び出しファイルを使用することですdocker-compose。たとえば、次のようになります。

  • 1つを作成すると、template.ymlこれがdocker-compose.yml環境変数です。
  • env.sh環境変数が ""ファイルにあるとします。
  • shファイルに次のコードを入れて実行してみてください。
source env.sh; rm -rf docker-compose.yml; envsubst < "template.yml" > "docker-compose.yml";

docker-compose.yml正しい環境変数値を使用して新しいファイルが生成されます。

template.ymlファイルの例:

SampleContainer:
        image: myImage:latest
        container_name: sample
        depends_on:
            - mysql-server
        restart: always
        volumes:
            - /opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties

サンプルenv.shファイル:

#!/bin/bash 
export SERVER_NAME=jingool

その他のオプションは次のとおりです。

docker-compose1.5+ では変数置換が有効になっています。https://github.com/docker/compose/releases

最新のDocker Composeを使用すると、Composeファイルから環境変数にアクセスできます。したがって、環境変数をインポートしてから、次のようにComposeを実行できます。

set -a
source .my-env
docker-compose up -d

docker-compose.ymlその後、次のように変数を参照できます${VARIABLE}

/opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties

ここからインポートされたドキュメントの詳細情報は次のとおりです。https://docs.docker.com/compose/compose-file/#variable-substitution

BASH方式:

これは.envbashスクリプトとファイルを使用するより柔軟な方法です。

サンプル.envファイル:

EXAMPLE_URL=http://example.com
# Note that the variable below is commented out and will not be used:
# EXAMPLE_URL=http://example2.com 
SECRET_KEY=ABDFWEDFSADFWWEFSFSDFM

# You can even define the compose file in an env variable like so:
COMPOSE_CONFIG=my-compose-file.yml
# You can define other compose files, and just comment them out
# when not needed:
# COMPOSE_CONFIG=another-compose-file.yml

その後、同じディレクトリでこのbashスクリプトを実行すると、すべてが正しくデプロイされます。

#!/bin/bash
docker rm -f `docker ps -aq -f name=myproject_*`
set -a
source .env
cat ${COMPOSE_CONFIG} | envsubst | docker-compose -f - -p "myproject" up -d

もう一つの興味深い内容は次のとおりです。https://modulitos.com/2016/03/lets-deploy-part-1/

関連情報