Dockerを利用していると、以下のような警告に遭遇することがあります。
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
これは、Linuxカーネルの設定で bridge-nf-call-iptables
と bridge-nf-call-ip6tables
が無効になっているために発生します。この設定が無効のままだと、Dockerネットワークのポリシーやルールが正しく動作しない場合があります。
この記事では、この警告を解消する手順を詳しく解説します。
原因
bridge-nf-call-iptables
と bridge-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-iptables
と bridge-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. 永続化のための設定
再起動後も有効になるように設定を永続化します。
- 設定ファイルの編集:
/etc/sysctl.conf
ファイルを開きます。sudo nano /etc/sysctl.conf
- 以下の2行を追加:
net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1
- 設定をリロード:
sudo sysctl -p
4. Dockerデーモンの再起動
カーネル設定を反映させるため、Dockerを再起動します。
sudo systemctl restart docker
5. 動作確認
設定が正しく反映されたか確認します。
docker info | grep WARNING
警告が表示されなければ、設定は完了です。
補足
- モジュールがロードされない場合: カーネルバージョンやセキュリティ設定によっては、モジュールが正しくロードされない場合があります。その場合は、
dmesg
やjournalctl
でエラーログを確認してください。 - 最新のDocker環境で発生する場合: Ubuntu 22.04 では、セキュリティや構成の変化により、Dockerを使用する際に追加の設定が必要になることがあります。公式ドキュメントも随時確認してください。
まとめ
この手順を実行することで、Dockerのネットワーク設定に関する警告「bridge-nf-call-iptables is disabled
」を解消できます。設定を適切に管理することで、コンテナ環境のネットワーク接続が正しく機能するようになります。