nftables環境でのDocker統合テストを修正

basecamp/kamal

Kamalの統合テスト環境において、nftablesを使用するホスト上でDockerコンテナ内からのnetfilterルール作成が失敗する問題が解決されました。

背景

現代のLinuxディストリビューションでは、従来のiptablesに代わってnftablesがデフォルトのファイアウォールバックエンドとして採用されています。しかし、nftables環境下では、Dockerコンテナ内からnetfilterルールを作成できないという制約があります。

この制約により、Kamalの統合テストで使用されるテストコンテナ内でdockerdの起動が失敗していました:

iptables v1.8.11 (nf_tables): CHAIN_ADD failed (No such file or directory)

技術的な変更

#1762では、テストコンテナの起動スクリプトにiptables-legacyへの切り替え処理を追加しています。

変更箇所:

# On hosts using nftables, Docker can't create netfilter rules from inside a container.
# iptables-legacy uses an older kernel interface that doesn't have this limitation.
update-alternatives --set iptables /usr/sbin/iptables-legacy 2>/dev/null || true
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy 2>/dev/null || true

dockerd --max-concurrent-downloads 1 &

同様の変更がtest/integration/docker/vm/boot.shにも適用されています。

update-alternativesコマンドを使用して、システムのiptables実装をlegacy版に切り替えることで、iptables-legacyが使用する古いカーネルインターフェース(xtables)経由でのnetfilterルール操作を可能にしています。

設計判断

この修正では、エラーが発生しても処理を続行できるよう|| trueを付加しています。これにより、iptables-legacyが利用できない環境でもスクリプトが中断されることを防いでいます。

また、IPv4(iptables)とIPv6(ip6tables)の両方を切り替えることで、完全な互換性を確保しています。

nftablesとiptables-legacyの共存は、コンテナ化されたテスト環境における実用的な解決策です。本番環境ではホストのnftables設定がそのまま使用されるため、この変更はテストインフラストラクチャにのみ影響します。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

ガイドライン準拠 ✓ PASS

記事構成とDiffDaily Styleへの準拠状況

記事構成の必須要素(Title, Context, Technical Detail, Design Insight)がすべて満たされており、非常に分かりやすい構成です。カスタムMarkdown構文(ファイル名付きコードブロック、GitHubリンク)も正しく使用されており、ガイドラインに完全に準拠しています。

  • 記事構成(Title、Context、Technical Detail)
  • DiffDaily Styleガイド準拠
  • カスタムMarkdown活用
  • 対象読者への適合性
技術的整合性 ⚠ WARNING

技術的な正確性と表現の適切性

Diff情報が提供されていないため、記事内のコード引用と実際の変更内容を照合できませんでした。しかし、引用されているコードは構文的に正しく、技術的な説明(nftables環境でのiptables-legacyへの切り替え)も論理的で妥当です。技術用語の誤用もありません。

  • 技術用語の正確性
  • コード例の正確性
  • 説明の技術的正確性
PR内容との整合性 ⚠ WARNING

元のPR情報との一致度

PRのDescriptionとDiffが提供されていないため、記事内容の完全な裏付けはできませんでした。しかし、記事の主張は提供されたPR Titleと整合しており、そこから妥当に推測できる範囲内です。根拠のない主張やハルシネーションは見られませんでした。

  • タイトル・説明の一致
  • Diff内容の正確な反映
  • 推測の排除