AFAIK這是不可能的,因爲Docker不會對這些變量應用替換。但是,您可以在容器中手動執行此操作。 YMMV,我用命令行參數進行了測試。
$ 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
是在輸出,因爲Bash解釋你在命令行寫的是什麼,但沒有什麼是變量。因此,添加eval
解決$TEST
:
[email protected]:/# eval echo "$TEST2"
my-path/test
echo
和"$TEST2"
是eval
這裏的論點。但是在執行eval
之前,$TEST2
被0123ash替換爲bash。因此,echo
和$TEST1/test
被給予eval
,其解釋爲$TEST1
並且用my-path
代替它。
但是,使用eval
會帶來一些安全風險,但它可以直接使用。有一種替代,envsubst
,以便您必須首先安裝:
[email protected]:/# apt update && apt install -y gettext-base
[...]
[email protected]:/# echo "$TEST2" | envsubst
my-path/test
由於envsubst
不能被劫持執行任意命令其更安全。
您可以使用ENTRYPOINT
腳本中的先前技術以透明的方式展開環境變量,例如, (未測試)
#!/bin/bash
export TEST2=`echo $TEST2 | envsubst`
exec "[email protected]"