コンテンツにスキップ

🐳 .env → docker-compose 環境変数

.env ファイル形式の内容を貼り付けるだけで、docker-compose.yml の environment ブロックに変換します。リスト形式 / 辞書形式の両方に対応。

完全無料 登録不要 ブラウザ完結 5 言語対応 ダークモード
🔒 プライバシー保証: .env の内容(API キーやパスワードを含む)はサーバーに送信されません。すべての変換はブラウザ内で完結します。

🔗 関連ツール

📖 つまずきやすいポイント

.env 形式のテキストを、docker-compose.ymlenvironment ブロック (リスト形式 / 辞書形式) に変換します。機密らしいキーの警告と、${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 はクォートの規則が違います.envFOO="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. 1
    .env を貼り付け
    左側の入力欄に .env ファイルの内容を貼り付けます。# で始まる行はコメントとして扱われます。
  2. 2
    出力形式を選択
    リスト形式 (- KEY=value) または辞書形式 (KEY: value) を選択し、必要に応じてシークレットを ${VAR} 参照に変換します。
  3. 3
    結果をコピー
    右側に変換結果が表示されます。コピーボタンで docker-compose.yml の environment 配下にそのまま貼り付けられます。

❓ よくある質問

シークレット警告はどのキーで出ますか?
キー名に PASSWORD / SECRET / KEY / TOKEN / API_KEY / PRIVATE などが含まれる場合に警告を表示します。
クォートやエスケープはどう扱われますか?
シングル/ダブルクォートで囲まれた値はクォートを除去します。値内に特殊文字(: # など)が含まれる場合、YAML 出力時に自動でクォートします。
変数展開($OTHER 参照)には対応していますか?
文字列としてそのまま出力します。docker-compose 自身が ${VAR} 参照を解決するため、リテラル展開は行いません。
🐛 このツールで問題が発生しましたか?

完全無料・登録不要。再現手順だけでも結構です。届いたご報告は運営者に直接届き、修正の参考にします。

※ 不具合再現のため、ブラウザ情報 (UA / 画面サイズ / 言語 / URL) を自動で送信します