Lesstep
GitHub Actions・Ubuntu 26.04・2026年11月4日に確認

「can't initialize iptables table `nat'」:Ubuntu 26.04 の Docker-in-Docker

ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。26.04 のイメージのカーネルは 7.0 で、古い iptables のテーブルをモジュールとして持ち、読み込んではいません:ip_tables・iptable_filter・iptable_nat・ip6_tables・ip6table_filter。24.04 では読み込まれていました。ランナー自身の Docker は nftables を使うので問題ありませんが、iptables-legacy を呼ぶコンテナはこれらを読み込めず、その中の dockerd は最初の NAT のルールで止まります。

どう見えるか

dev container の docker-in-docker 機能では、ジョブのログに出るのはやり直しの行が4回だけです:

(*) Failed to start docker, retrying...
(*) Failed to start docker, retrying...
(*) Failed to start docker, retrying...
(*) Failed to start docker, retrying...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

理由はコンテナの中の /tmp/dockerd.log にあります。機能の docker-init.sh が書き、どこにも表示されません:

failed to start daemon: Error initializing network controller: ... failed to create NAT chain DOCKER:
iptables v1.8.11 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)

コンテナの中で自分で iptables-legacy を呼んでも、nat が filter になるだけで同じように落ちます。

機能が legacy を選ぶわけ

機能の版 2 と 3 は、iptables の切り替えをイメージのビルドのときに、イメージ自身のディストリビューションで決めます。iptables-nft になるのはイメージ自身が Ubuntu 26.04 のときだけで、Debian の bookworm・trixie や Ubuntu 22.04・24.04 を含むほかはすべて iptables-legacy です。:2 のタグは2026年5月の 2.17.0、:3 は 3.1.0 で止まっているので、どちらにもあとの直しは届きません。4.0.0(2026年6月)は、この選択をコンテナの起動のときに移し(iptablesSwitchAtRuntime・既定で有効)、ホストで ip_tables が読み込まれているときだけ legacy を使います(devcontainers/features #1666)。

報告のあったもの

直し方:機能を版 4 に上げる

"features": {
  "ghcr.io/devcontainers/features/docker-in-docker:4": {}
}

リポジトリに devcontainer-lock.json があれば、その docker-in-docker の項目も更新します。そこには正確な版とダイジェストがあり、落ちたプロジェクトのロックは 2.17.0 のままでした。ビルド済みの dev container のイメージは、作り直すまで古い選択のままです。コンテナのエントリポイントが root 以外のユーザーで動くなら、4.1.3 以降を使います(#1747)。2 から 4 はメジャーの版を2つ越えるので、切り替える前に機能のオプションを読んでおきます。

または、ランナーでモジュールを読み込む

- run: sudo modprobe -a ip_tables iptable_filter iptable_nat ip6_tables ip6table_filter

コンテナを起動するステップより前に実行します。機能だけでなく、iptables-legacy を使うどのコンテナにも効き、aios #2567 のプロジェクトは CI でこうしています。セルフホストの 26.04 のホストなら、5つのモジュールを並べたファイルを /etc/modules-load.d/ に置いて、起動のときに読み込みます。

ジョブを runs-on: ubuntu-24.04 に固定しても動きます。GitHub がそのイメージを終えるまでは使えます。

見分け方

ほかの 26.04 の失敗

失敗したジョブを IntelliJ IDEA から見るなら

Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。

JetBrains Marketplace で入れる

GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、Docker は Docker, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・Docker, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の Docker で Postgres が起動しない · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English