Dockerの警告「bridge-nf-call-iptables is disabled」の解消方法【Ubuntu 22.04】

Dockerを利用していると、以下のような警告に遭遇することがあります。

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

これは、Linuxカーネルの設定で bridge-nf-call-iptablesbridge-nf-call-ip6tables が無効になっているために発生します。この設定が無効のままだと、Dockerネットワークのポリシーやルールが正しく動作しない場合があります。

この記事では、この警告を解消する手順を詳しく解説します。


原因

bridge-nf-call-iptablesbridge-nf-call-ip6tables は、ネットワークブリッジを通じてデータが流れる際に、カーネルが iptables(または ip6tables)ルールを適用するかどうかを制御する設定です。これが無効の場合、Dockerのネットワーク設定が期待通りに動作しない可能性があります。


解決手順

1. 必要なモジュールをロード

Dockerネットワークでブリッジ機能を使うには、br_netfilter モジュールがロードされている必要があります。

以下のコマンドでモジュールがロードされているか確認します。

lsmod | grep br_netfilter

モジュールがロードされていない場合は、以下を実行してロードしてください。

sudo modprobe br_netfilter

さらに、再起動後もモジュールをロードするように以下の設定を行います。

echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf

2. 一時的にカーネルパラメータを有効化

以下のコマンドを実行して、bridge-nf-call-iptablesbridge-nf-call-ip6tables を有効にします。

sudo sysctl -w net.bridge.bridge-nf-call-iptables=1
sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=1

現在の設定を確認するには以下を実行します。

sudo sysctl net.bridge.bridge-nf-call-iptables
sudo sysctl net.bridge.bridge-nf-call-ip6tables

両方の設定が 1 であれば一時的な設定は成功です。


3. 永続化のための設定

再起動後も有効になるように設定を永続化します。

  1. 設定ファイルの編集: /etc/sysctl.conf ファイルを開きます。 sudo nano /etc/sysctl.conf
  2. 以下の2行を追加: net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1
  3. 設定をリロード: sudo sysctl -p

4. Dockerデーモンの再起動

カーネル設定を反映させるため、Dockerを再起動します。

sudo systemctl restart docker

5. 動作確認

設定が正しく反映されたか確認します。

docker info | grep WARNING

警告が表示されなければ、設定は完了です。


補足

  • モジュールがロードされない場合: カーネルバージョンやセキュリティ設定によっては、モジュールが正しくロードされない場合があります。その場合は、dmesgjournalctl でエラーログを確認してください。
  • 最新のDocker環境で発生する場合: Ubuntu 22.04 では、セキュリティや構成の変化により、Dockerを使用する際に追加の設定が必要になることがあります。公式ドキュメントも随時確認してください。

まとめ

この手順を実行することで、Dockerのネットワーク設定に関する警告「bridge-nf-call-iptables is disabled」を解消できます。設定を適切に管理することで、コンテナ環境のネットワーク接続が正しく機能するようになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です