2016-05-12 1 views
2

は、私は以下の環境変数を持っている私のドッキングウィンドウのクライアントマシン上と仮定します。 (DOCKER_CONTAINERを含むもの)。ドッカーのクライアント環境変数をドッカーの実行コマンドにフィルタする方法はありますか?</p> <pre><code>myValA=B DOCKER_CONTAINER_VALUE_C=networksettingD myValE=F DOCKER_CONTAINER_VALUE_G=arbitrarySettingH </code></pre> <p>と私は私が実行している私のドッカー容器に、これらの値のうちの2つを渡したい:

今私は手動でこのように、それをハードコーディングできます。

docker run -e DOCKER_CONTAINER_VALUE_C='networksettingD' -e DOCKER_CONTAINER_VALUE_G='arbitrarySettingH' --name container_name dockerhub_id/image_name 

しかし、私はこのプロセスを自動化したいです。以下のような

何か:

docker run -e ${env | grep "DOCKER_CONTAINER"} ... 

私の質問は:ドッカrunコマンドにドッキングウィンドウのクライアント環境変数をフィルタリングする方法は?

set | grep DOCKER_CONTAINER > env_file 
docker run --env-file env_file ... 

をそれとも、本当に単一のコマンドラインをしたい場合:

答えて

1

あなたはこのような何かを行うことができ

docker run --env-file <(set | grep DOCKER_CONTAINER) ... 

<(...)コンストラクトは、プロセス置換のためのbash構文は次のとおりです。 bash(1) から:

プロセス置換が名前付きパイプ(FIFO)または開いているファイルに名前を付けるの の/ dev/fdのメソッドをサポートしているシステムでサポートされています。 <(リスト)または>(リスト)の形式をとります。 プロセスリストは、その入力または出力がFIFOまたは /dev/fdのファイルに接続されて実行されます。このファイルの名前は、拡張の結果として として現在のコマンドに引数として渡されます。

0
env | { sed -n '/DOCKER/s/^/-e /p' ; echo myimage; } | xargs docker run 
+1

これは実際には機能しません。あなたの最終的なコマンドが 'xargs docker run myimage'であれば、xargsの結果は' docker run myimage -e ... 'となります。これはあなたが望むことをしません。また、空白を含む変数はどのような場合でもこれを上回ります。対話式のドッカーセッションを望むなら、あなたは不運になります。 – larsks

+0

@larsksフィードバックいただきありがとうございます。私は実際にドッカーを使用していませんが、さらに引数が '-e'オプションに続くかもしれないという事実を説明するために私の答えを修正しました。 –

+0

'xargs'が' -e DOCKER_CONTAINER_VALUE_C = networksettingD -e DOCKER_CONTAINER_VALUE_G = arbitrarySettingH'を1つの引数として渡してエラーになるため、これはやはり失敗します。 – larsks

0

のような単純な何か:

docker run -e $(set | echo $(sed -n "/^DOC.*_CON.*_VAL.*/s/^/-e /p")" ")--name container_name dockerhub_id/image_name 
  • $() - 実行コマンド
  • セット - リストの環境変数
  • -n sedの - 何も印刷
  • しません
  • 一致する文字列^ DOC。 _CON。 _val *
  • 行文字
  • Pの先頭に代わる "-e" - 。印刷は "
  • " に一致する - あなたは完全一致文字列を含むことができ、結果

の間にスペースを追加;私は通常、最短のために行く...

検証済みです。

関連する問題

 関連する問題