ショコラ
envsubstコマンドの使い方
コンテナ起動時に「envsubst ‘$${環境変数}’ < {テンプレート} > {設定ファイル}」でキメマス。
ポイントは「’$${環境変数}’」の部分。書かないと設定ファイルの中に記載した$のものが消えます。「”」だけでもOK。
もっさん先輩
envsubst '$${環境変数}' < {テンプレート} > {設定ファイル}
環境変数を複数設定する場合はスペースで区切ります。
envsubst '$${環境変数} $${環境変数}' < {テンプレート} > {設定ファイル}
ポイントは「’$${環境変数}’」の部分。書かないと設定ファイルの中に記載されている $変数 のものが全て消えます。「”」だけでも消えませんでした。
envsubst '' < {テンプレート} > {設定ファイル}
手順
単純な置き換えの例。
- 環境変数を設定します。
export NAME=mossan
- envsubstコマンドを実行します。
echo 'Hello,${NAME}' | envsubst '$$NAME'
↓${NAME} が環境変数の NAME に置き換えられました。
$ echo 'Hello,${NAME}' | envsubst '$$NAME'
Hello,mossan
以上
例
nginx の設定ファイルの例
server
{
listen 80 default_server;
server_name _;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
location /
{
proxy_pass http://${BACKEND}:${PORT};
}
}
この ${BACKEND}、${PORT} を envsubstコマンドで環境変数に置き換えるには以下のように書きます。
envsubst '$$BACKEND $$PORT' < /etc/nginx/conf.d/default.conf.tmpl > /etc/nginx/conf.d/default.conf
実際は、コンテナの起動時に envsubstコマンドでテンプレートファイル作成します。
CMD envsubst '$$BACKEND $$PORT'\
< /etc/nginx/conf.d/default.conf.tmpl\
> /etc/nginx/conf.d/default.conf && nginx; tail -f /dev/null
シチュエーション
- Nginx の設定ファイル内で、環境変数を使いたい。
- vsftpd の設定ファイル内で、環境変数を使いたい。
- msmtp の設定ファイル内で、環境変数を使いたい。
- 環境変数に対応していない設定ファイル内で、環境変数を使いたい。