コンテナ起動時にシェルだけで、環境変数でファイルを書き換える方法です。
下記のようなファイルを準備します。
${VAL1}の部分を環境変数で書き換えます。
$ cat test.tmpl
aaa
bbb
{${VAL1}}
ccc
$
下記のように、コンテナ起動時に-eオプションでVAL1に書き換えたい値を環境変数として、指定します。
$ docker run --rm -e VAL1="$(date)" -v .:/mnt --workdir /mnt nginx:1.17.4 /bin/bash -c 'eval "echo \"$(cat test.tmpl)\"" > /tmp/test.txt && cat /tmp/test.txt'
aaa
bbb
{2019年 10月 12日 土曜日 08:11:47 JST}
ccc
$
-vと--workdirオプションは、今回の検証用でカレントディレクトリをマウントしましたが、コンテナに書き換えるファイルをCOPYすれば不要です。
書き換えの処理は、shやbashのevalを使います。
echoコマンドは、文字列の環境変数を置換してくれます。
$ echo $VAL1
okok
$ eval "echo \"$(cat test.tmpl)\""
aaa
bbb
{okok}
ccc
$
下記のようにテンプレートファイルとentrypoint用のシェルを準備します。
$ cat Dockerfile FROM nginx:1.17.4 COPY test.tmpl /mnt/test.tmpl COPY entrypoint.sh / RUN chmod +x /entrypoint.sh $ cat entrypoint.sh #! /bin/bash eval "echo \"$(cat /mnt/test.tmpl)\"" > /tmp/test.txt cat /tmp/test.txt $
下記のようにシェルだけで書き換えができました。
$ docker run -e VAL1="$(date)" --rm test /entrypoint.sh
aaa
bbb
{2019年 10月 12日 土曜日 08:43:05 JST}
ccc
$