2017-08-28 13 views
1

私はgoのベースイメージを持っています。この画像は$GOPATH=/go は今、私はこのようなこの画像からコンテナを起動するデフォルトの変数として持っている:ドッカーの他の環境変数に基づいて環境変数をenvファイルに設定します

$ docker run -env-file ./myenvfile go 

myenvfileの内容は

TEST=$GOPATH/other/path 

私はコンテナを起動していると私はecho $TESTを行います私が/go/other/pathを望んでいる間、出力は$GOPATH/other/pathです。

dockerのenv-fileに既存の環境変数を再利用することはできますか?

答えて

0

AFAIK Dockerはこれらの変数に代入を適用しないため、これは不可能です。ただし、これはコンテナで手動で行うことができます。 YMMV、私はコマンドライン引数でテストを行った。 bashが変数であるあなたが、コマンドラインに書かれたものは解釈ではなくので、

$ docker run -it --rm -e TEST1="my-path" -e TEST2='$TEST1/test' ubuntu bash 
[email protected]:/# echo "$TEST1" 
my-path 
[email protected]:/# echo "$TEST2" 
$TEST1/test 

$TEST1は出力です。したがって、evalを追加すると$TESTを解決します

[email protected]:/# eval echo "$TEST2" 
my-path/test 

echo"$TEST2"はここevalの引数です。しかし、evalが実行される前に、$TEST2は、bashによって$TEST1/testに置き換えられます。したがって、echo$TEST1/testevalに与えられ、$TEST1を解釈し、my-pathと置き換えます。

ただし、evalを使用するとセキュリティ上のリスクが発生しますが、そのまま使用できます。

[email protected]:/# apt update && apt install -y gettext-base 
[...] 
[email protected]:/# echo "$TEST2" | envsubst 
my-path/test 

envsubstがより安全な任意のコマンドを実行するためにハイジャックされないように:あなたが最初にインストールする必要がありそのための代替、envsubstは、あります。

ENTRYPOINTスクリプトで以前の手法を使用して、環境変数を透過的に展開することができます。 (テストされていない)

#!/bin/bash 

export TEST2=`echo $TEST2 | envsubst` 

exec "[email protected]"