私のサービスにボリュームを追加したいのですが、それは最終ユーザーがフォルダーを与えた場合に限られます。それ以外の場合は、ボリュームをマウントしないでください。すでに準備されているイメージには、デフォルトのフォルダーに有効なデータが含まれています。
つまり、次のようなことをしたいのです。疑似コード:
services:
my_awesome_service:
volumes:
if ${VARIABLE} => ${VARIABLE}:/app/folder
そのような条件ステートメントをdocker-composeファイルで実行可能および定義可能に確立していますか?これを可能にする唯一の方法は、ボリュームマウントを持たない基本docker-composeファイルを最初に定義することです。 、および2番目のdocker-composeファイルの呼び出しは、$VARIABLE
が定義されています。これは単一または少数の条件では問題ありませんが、多数ある場合は厄介になります。
解決策はありますか?
このようなものは現在存在しません。私が思いつくことができるこれを実装するためのオプションは次のとおりです:
たくさんのコンポーズファイルを作成し、最終的なファイルを構築するために必要なパーツをマージします。
作成ファイルを動的に生成します。 jsonnet のようなものが出発点として適しているかもしれません。
作成をスキップして、動的にdocker run
コマンド。これは移植性に欠け始めていますが、いくつかのユースケースは自分でスクリプトを書く方が簡単です。
コンポーズおよびdocker/cli githubリポジトリにPRを送信して、コンポーズ機能を拡張します。これをgolangテンプレート構文で行うことは、私にとって最も理にかなっています。
貧乏人の解決策:
volumes:
${VARIABLE:-/dev/null}:/app/folder
または:
volumes:
${VARIABLE:-/dev/null}:${VARIABLE:-/tmp}/app/folder
ええ、私はdocker-composeのフォーマットが条件付きステートメントをサポートしているとは思いません。
ただし、2つの解決策があります。
docker-compose.yaml:
command: ${COMMAND_PARAMS}
bash:
#!/bin/bash
if test -z $CONDITION; then
params="-param1 ${MIPARAM1}"
else
params="-param1 ${MIPARAM1} -param2 ${MIPARAM2}"
fi
COMMAND_PARAMS=$params docker-compose up
(クレジットはgithubの元のポスター、@ shin-に送られます)
folder_defaults
のような名前のフォルダーにあるdocker imageのデフォルトフォルダーを準備し、次にdocker-compose.ymlでボリュームを常に定義しますが、最後に、ボリュームがフォルダは空で、空の場合はln -s
からfolder_defaults
へ。それ以外の場合はそのままにします。条件付きスクリプトの例:
if [ -z "$(ls -A /a/folder)" ]; then
do something... using /a/folder_defaults
fi
オーケストレーションにRancherを使用している場合、エスケープ{{...}}}
availableは、Rancherバージョンのdocker-composeの条件ステートメントに使用できます。
統合されたGOテンプレートシステムの詳細については こちら をご覧ください。