WSL2でDockerサービスが起動しない場合の対処法
環境
- Windows11
- WSL2
- Ubuntu22.04 LTS
症状
sudo service docker
startでdockerサービスを起動すると起動成功のメッセージが表示されるが、sudo
service docker statusでステータスを確認すると* Docker is not runningと表示されている。
調査方法
cat /var/log/docker.log
docker.logを確認すると、以下のエラーメッセージが表示されている。
failed to start daemon: Error initializing network controller:
error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain:
(iptables failed: iptables --wait -A DOCKER-ISOLATION-STAGE-1 -j RETURN: iptables v1.8.7 (nf_tables):
RULE_APPEND failed (No such file or directory): rule in chain DOCKER-ISOLATION-STAGE-1 (exit status 4))
原因
Ubuntu 22.04 の iptables はデフォルトで nf_tables バックエンドを使用しているが、WSL2のカーネルが nf_tables を完全にサポートしていないため、Dockerデーモンがネットワーク初期化時にチェーンのルール追加に失敗して起動できない。
対処法
update-alternatives コマンドで iptables / ip6tables の実装を nf_tables バックエンドから旧来の legacy バックエンドに切り替える。
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
切り替え後、Dockerサービスを再起動する。
sudo service docker start
更新履歴
- 原因・対処法の説明を修正。
- 新規作成。