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/test
はeval
に与えられ、$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]"