🐳 .env → docker-compose 環境変数
.env ファイル形式の内容を貼り付けるだけで、docker-compose.yml の environment ブロックに変換します。リスト形式 / 辞書形式の両方に対応。
⚠️ シークレット警告
以下のキーは機密情報の可能性があります。docker-compose.yml に直接書かず、.env 参照(${VAR})の使用を推奨します。
🔗 関連ツール
📖 つまずきやすいポイント
.env 形式のテキストを、docker-compose.yml の environment ブロック (リスト形式 / 辞書形式) に変換します。機密らしいキーの警告と、${VAR} 参照への置き換えにも対応し、処理はブラウザ内で完結します。このツールの本題は書式変換ではなく、変換した結果をどこに置くかです — docker-compose.yml は Git に入るファイルなので、値をそのまま書き写すと、その時点で秘密ではなくなります。
| ケース | 何が起きるか | どうする |
|---|---|---|
| API キーを docker-compose.yml に直接書いてしまう | docker-compose.yml はほぼ確実にリポジトリにコミットされるファイルです。ここに本物のキーを書いた時点で、チーム全員、CI、フォークした人、リポジトリをクローンした全員がそれを読めます。さらに深刻なのはGit の履歴に永久に残ることで、あとから git rm しても過去のコミットには残り続けます。公開リポジトリの場合、GitHub にプッシュした瞬間から数分以内に自動スキャンされます — 「すぐ消したから大丈夫」は成立しません。 |
このページの「${VAR} 参照に変換」を有効にしてください — DB_PASSWORD=${DB_PASSWORD} のように書けば、compose が同じディレクトリの .env から実際の値を読みます (.env は .gitignore に入れます)。そもそも env_file: .env と書けば、キーの一覧すら compose ファイルに書かずに済みます。すでにコミットしてしまった場合、履歴の書き換えは対処になりません — フォーク・キャッシュ・CI のログ・他人のローカルクローンに残るためです。唯一の正しい対処は、そのキーを無効化して新しいものを発行することです。気付いた時点ですぐ行ってください。 |
| 値のクォートやエスケープが期待どおりにならない | .env と YAML はクォートの規則が違います。.env の FOO="bar baz" のクォートはシェル由来の記法で、Docker Compose のバージョンによってはクォートごとリテラルとして扱われ、値に " が含まれてしまいます。逆に YAML 側では、値に : や # や { が含まれるとクォートが必須です — URL: http://x:8080 はコロンのせいで壊れます。もう 1 つ、.env は改行を含む値を表現できません — 秘密鍵や証明書を入れようとすると、必ずここで詰まります。 |
値に空白・:・#・{ が含まれるなら、YAML 側では必ずクォートしてください — このツールは自動で判断しますが、手で編集したあとは docker compose config を実行して、解釈された結果を確認してください。このコマンドは変数の展開まで済ませた最終形を出力するので、意図どおりかどうかが一目で分かります。改行を含む値は Base64 にしてから 1 行で渡すのが定石です (アプリ側でデコードします) — あるいは、そもそも環境変数ではなく Docker の secret やボリュームマウントでファイルとして渡してください。証明書や鍵は、環境変数に入れるべきものではありません。 |
| 変数が展開されない・古い値が入る | .env の中での相互参照は展開されません。HOST=example.com の次の行に URL=http://$HOST/api と書いても、URL の値は文字どおり http://$HOST/api になります — compose が ${VAR} を展開するのは compose ファイルの中だけで、.env はただのキーと値の一覧として読まれるからです。「古い値が入る」ほうの原因は優先順位です — 同じ変数が複数の場所にあるとき、environment: が env_file: より強く、env_file: が .env より強いので、.env を直したのに environment: に古い値が残っていると、そちらが勝ちます。 |
まず docker compose config を実行してください — すべての解決を済ませた最終的な設定が出力されるので、どの値が採用されたのかが確実に分かります。これを見ずに .env と compose ファイルを往復して直そうとすると、必ず時間を失います。値の組み立てが必要な場合 ($HOST から $URL を作るなど) は、コンテナのエントリポイントスクリプトの中で行ってください — そこは通常のシェルなので展開できます。環境変数の値として $ そのものを渡したいときは $$ と書きます — パスワードに $ が含まれていると、これを知らないうちは原因が分かりません。 |
.env をリポジトリに置かないでください。代わりに .env.example を置き、キー名だけを列挙して値は空にしておきます — 新しく参加した人が何を設定すべきかが分かり、値そのものは漏れません。.gitignore には .env を、ただし !.env.example の例外も忘れずに書いてください。もう 1 点、環境変数はコンテナの中で docker inspect や /proc/1/environ から読めます — つまりそのコンテナに入れる人には全部見えます。本番の重要な秘密は、環境変数ではなく Docker Swarm の secret や Kubernetes の Secret (さらに外部の Vault) で、ファイルとしてマウントするのが望ましい形です。環境変数は「秘密を安全に保つ仕組み」ではなく、「秘密をコードから分離する仕組み」だと理解しておいてください — この 2 つは別のことです。
📖 使い方
-
1
.env を貼り付け左側の入力欄に .env ファイルの内容を貼り付けます。# で始まる行はコメントとして扱われます。
-
2
出力形式を選択リスト形式 (- KEY=value) または辞書形式 (KEY: value) を選択し、必要に応じてシークレットを ${VAR} 参照に変換します。
-
3
結果をコピー右側に変換結果が表示されます。コピーボタンで docker-compose.yml の environment 配下にそのまま貼り付けられます。
❓ よくある質問
シークレット警告はどのキーで出ますか?
クォートやエスケープはどう扱われますか?
変数展開($OTHER 参照)には対応していますか?
🐛 このツールで問題が発生しましたか?
完全無料・登録不要。再現手順だけでも結構です。届いたご報告は運営者に直接届き、修正の参考にします。
ご報告ありがとうございます!
運営者に届きました。改善の参考にさせていただきます。