tag:crieit.net,2005:https://crieit.net/tags/--env-file/feed 「--env-file」の記事 - Crieit Crieitでタグ「--env-file」に投稿された最近の記事 2022-05-23T23:58:56+09:00 https://crieit.net/tags/--env-file/feed tag:crieit.net,2005:PublicArticle/18195 2022-05-23T23:58:56+09:00 2022-05-23T23:58:56+09:00 https://crieit.net/posts/docker-compose-change-enviroment-variables-file-20220523 Docker Compose に渡す環境変数ファイルを変更する <p>Docker Compose に渡す環境変数に .env 以外のファイルから渡したいと考えたのでメモしておきます。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>アプリケーション開発環境等で開発環境用の <code>.development.env</code> と本番環境用の <code>.production.env</code> を用意したとして、この2つのどちらかから Docker Compose に環境変数を渡したい。</p> <p>開発環境なのでアプリ側で使用する環境変数と Dockerコンテナ 内で使用する環境変数を統一したい、と。</p> <p>ただし、デフォルトでは Docker Compose は <code>.env</code> からしか環境変数を読み取ってくれません。これをどうにかしたい。</p> <h2 id="コマンド"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">コマンド</a></h2> <pre><code class="bash">> docker-compose --env-file .development.env up -d </code></pre> <p>ということでコマンドですが、 <code>docker-compose</code> コマンドに <code>--env-file</code> でパラメータを渡してあげると <code>.env</code> 以外のファイルも環境変数のソースとして渡すことができます。</p> <h2 id="(余談) コマンド実行時の --env-file パラメータと .envファイル と docker-compose.yml の env_file キー"><a href="#%28%E4%BD%99%E8%AB%87%29+%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AE+--env-file+%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%A8+.env%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E3%81%A8+docker-compose.yml+%E3%81%AE+env_file+%E3%82%AD%E3%83%BC">(余談) コマンド実行時の --env-file パラメータと .envファイル と docker-compose.yml の env_file キー</a></h2> <p>さて、ここから少しややこしい話を。</p> <p>Docker Compose 周りでは環境変数関連で見出しに挙げた3つの方法があるようです。</p> <p><code>.env</code> については Docker Compose で使用できる環境変数ファイル。これは良いですね。</p> <p>この <code>.env</code> をそれ以外のファイル名・ディレクトリのファイルから読み取るように変更できるのが <code>docker-compose</code>コマンド 実行時の <code>--env-file</code> パラメータ。</p> <p>ここまでは <strong><code>docker-compose.yml</code> 内で使用できる</strong> 環境変数です。</p> <p>それでは最後、 <code>docker-compose.yml</code> の <code>env_file</code>キー は何か。</p> <pre><code>version: '3.7' services: db: env_file: - .dvelopment.env </code></pre> <p>最後の <code>env_file</code> は <code>docker-compose.yml</code> 内に記述できるパラメータで、これを使って環境変数のファイルを指定することができます。</p> <p>ただし、このパラメータで指定した環境変数は、 <strong>起動したコンテナ内からは参照できますが、 <code>docker-compose.yml</code> 内からは参照できません</strong>。</p> <p>ということで、今回やりたいこととはマッチしません。そもそもの目的が異なる、ということですね。</p> <p>過去の先人達のように自分も嵌まったのでこのことも併せてメモしておきます。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/rhene/scraps/781fdbecd340d3">docker-composeで環境変数が読み込まれない?</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/SolKul/items/989727aeeafcae28ecf7">docker-composeのenv_fileと.envファイルの違い - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://docs.docker.jp/compose/environment-variables.html">Compose における環境変数 — Docker-docs-ja 19.03 ドキュメント</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://docs.docker.com/compose/environment-variables/">Environment variables in Compose | Docker Documentation</a></li> </ul> arm-band