ボリュームセクションで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-compose
1.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方式:
これは.env
bashスクリプトとファイルを使用するより柔軟な方法です。
サンプル.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/