Docker Compose YAML の検証

Compose ファイルを貼り付けると、サービス一覧とローカル構造リンターの検出結果が表示されます。YAML はブラウザー内で解析され、アップロードも Docker デーモンへの接続も Compose の実行も行いません。

ブラウザ内でローカルに実行
Compose YAML

compose.yaml または docker-compose.yml を貼り付けてください。 解析と検査はブラウザー内で実行されます。

ブラウザー内で動く構造リンターです。イメージの取得、Docker デーモンの検査、環境変数の解決、Compose の実行は行いません。

検出結果
  • Compose ファイルを検証すると、ローカル検査の結果が表示されます。
サービス一覧
サービスイメージ / ビルドポート依存先
まだ Compose ファイルを検証していません。

docker compose up の前に Compose ファイルを検証する手順

compose.yaml または docker-compose.yml を貼り付けて「Compose ファイルを検証」を押すと、ブラウザー内で解析し、2 つの結果を表示します。重要度ごとの検出結果(services.db.ports[0] のような該当キーのパス付き)と、各サービスのイメージまたは build の指定・公開ポート・depends_on の一覧です。

組み込みのサンプル(api と db、それぞれ名前付きボリューム付き)は「確認できます」と表示され、docker compose up を妨げる問題はありません。一方、2 つのサービスで同じホストポートを使う、存在しないサービスを depends_on に書く、a → b → a のような循環参照はエラーとして報告されます。

  1. 左のパネルに Compose ファイルを貼り付けます。読み込むのは 1 つの YAML ドキュメントですが、同等の JSON も受け付け、アンカー・エイリアス・マージキーにも対応します。
  2. 「Compose ファイルを検証」を押します。2 サービスのサンプルから始めるなら「サンプルを読み込む」、次のファイルの前に両方のパネルを空にするなら「クリア」を使います。
  3. まず検出結果を読みます。各行には重要度バッジ、ファイル内のパス、問題の説明が 1 文で表示されます。エラーは Compose の実行を妨げる問題、警告は確認推奨、情報は補足です。
  4. サービス一覧で、解決済みのイメージまたは build の指定、公開ポート、depends_on の一覧を確認します。マージキー経由でイメージを継承しているサービスも表示されます。
  5. ファイルを修正して再検証し、要約を確認します。「確認できます」と出れば、実装済みの検査では構造上の問題は見つかっていません。

この Compose リンターが確認する項目と、読み取らないもの

検査が対象とする範囲

構造: services は 1 つ以上のサービスを持つマッピング、各サービスはオブジェクトである必要があり、名前に使えるのは英数字・ピリオド・アンダースコア・ハイフンだけです(それ以外は Compose が拒否します)。image は空でない文字列、build はパスかオブジェクトでなければならず、どちらもないサービスは実行できないため警告します。

ポート: コンテナ側は 1〜65535 で、公開するホスト側ポートは単一の数値または 8000-8005 のような範囲を指定できます。範囲外や数値でないホストポート、tcp・udp・sctp 以外のプロトコル、同一サービス内および異なるサービス間の重複・範囲の重なりを検出します。network_mode: host と公開ポートの併用は、実行時にポート指定が無視されるため警告になります。

依存関係・ボリューム・マージキー

depends_on はリストまたはマッピングで指定でき、参照先が存在し、グラフに循環がない必要があります。a → b → a や自分自身への依存は、循環の経路全体とともにエラーになります。container_name と privileged: true は、スケールを妨げたりホスト権限を広げたりするため警告として表示します。

サービスが使う名前付きボリュームは、トップレベルの volumes で宣言されている必要があります。アンカーとエイリアスはローカル解析器が解決し、<<: *common がマッピングを指す場合はサービスにマージされるため、マージキー経由のイメージも一覧に表示されます。解決できない場合は、イメージ不足と決めつけずにその旨を表示します。

このリンターが行わないこと

何も実行しません。docker compose の実行、Docker デーモンへの接続、イメージの取得は行いません。${POSTGRES_PASSWORD} のような変数は解決せず、.env ファイルも読みません。profiles や extends は構造としてのみ確認します。Compose のバージョン差は再現しないため、最終確認は実際に使うバージョンで行ってください。

解析はブラウザー内で完結し、貼り付けた内容は送信されず、オフラインでも検証できます。大きなファイルは端末のメモリに依存し、読み込めるのは 1 ドキュメントずつです。2 つ目の --- ドキュメントがあるファイルは行番号付きで拒否されます。

最近使ったツール: