envsubstコマンドの使い方

ショコラ
ショコラ

envsubstコマンドの使い方

コンテナ起動時に「envsubst ‘$${環境変数}’ < {テンプレート} > {設定ファイル}」でキメマス。
ポイントは「’$${環境変数}’」の部分。書かないと設定ファイルの中に記載した$のものが消えます。「”」だけでもOK。

もっさん先輩
もっさん先輩
envsubst '$${環境変数}' < {テンプレート} > {設定ファイル}

環境変数を複数設定する場合はスペースで区切ります。

envsubst '$${環境変数} $${環境変数}' < {テンプレート} > {設定ファイル}

ポイントは「’$${環境変数}’」の部分。書かないと設定ファイルの中に記載されている $変数 のものが全て消えます。「”」だけでも消えませんでした。

envsubst '' < {テンプレート} > {設定ファイル}

手順

単純な置き換えの例。

  1. 環境変数を設定します。
export NAME=mossan
  1. 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 の設定ファイル内で、環境変数を使いたい。
  • 環境変数に対応していない設定ファイル内で、環境変数を使いたい。
Scroll to Top