コンテナ起動時にシェルだけで、環境変数でファイルを書き換える方法です。
下記のようなファイルを準備します。
${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 $