0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2 + Docker + Supabase トラブルシューティングガイド(自分用)

0
Posted at

WSL2 + Docker + Supabase トラブルシューティングガイド

背景

WSL2環境でSupabase Localを使用していると、Dockerコンテナの起動失敗時にポートが解放されず、再起動しても問題が解決しないことがあります。本記事では、2026年3月に発生した一連のトラブルとその解決方法を記録します。

発生した問題

問題1: ポートが既に使用中

failed to start docker container: Error response from daemon: failed to bind host port for 0.0.0.0:54324:172.20.0.7:8025/tcp: address already in use

原因: Supabaseコンテナが正常に停止されず、docker-proxyプロセスが孤立して残っていた。

問題2: Docker再起動後もポートが解放されない

sudo systemctl restart docker を実行しても、docker-proxyが再生成される。

原因: /var/lib/docker/network/files/local-kv.db に孤立したネットワーク設定が残っていた。

問題3: iptablesチェーンが存在しない

iptables v1.8.10 (nf_tables): Chain 'DOCKER-ISOLATION-STAGE-2' does not exist

原因: WSL2のUbuntuでiptablesがnftablesバックエンドを使用しており、Dockerと互換性がなかった。

解決手順

Step 1: iptablesをlegacyモードに切り替え(恒久対策)

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

Step 2: nftablesのルールをクリア

sudo nft flush ruleset

Step 3: Dockerを完全にリセット

# DockerとSocketを完全に停止
sudo systemctl stop docker.socket docker

# 孤立したdocker-proxyを全てkill
sudo pkill -9 -f docker-proxy

# Dockerのネットワーク設定を削除
sudo rm -rf /var/lib/docker/network

# Dockerを再起動
sudo systemctl start docker

Step 4: Supabaseを起動

npx supabase start

予防策

1. Supabaseは必ず正しく停止する

# 推奨
npx supabase stop

# バックアップ不要な場合
npx supabase stop --no-backup

やってはいけないこと:

  • Ctrl+Cで強制終了
  • ターミナルをそのまま閉じる
  • PCをシャットダウン/スリープさせる(コンテナ稼働中)

2. package.jsonにスクリプトを追加

{
  "scripts": {
    "db:start": "supabase start",
    "db:stop": "supabase stop --no-backup",
    "db:reset": "supabase stop --no-backup && supabase start"
  }
}

3. トラブル発生時用のリセットスクリプトを用意

~/bin/docker-reset.sh として保存:

#!/bin/bash
set -e

echo "Stopping Docker..."
sudo systemctl stop docker.socket docker

echo "Killing orphaned docker-proxy processes..."
sudo pkill -9 -f docker-proxy 2>/dev/null || true

echo "Clearing Docker network config..."
sudo rm -rf /var/lib/docker/network

echo "Starting Docker..."
sudo systemctl start docker

echo "Docker reset complete!"

実行権限を付与:

chmod +x ~/bin/docker-reset.sh

4. 作業終了時のチェックを習慣化

# コンテナが残っていないか確認
docker ps

# 何もなければOK

5. エイリアスを設定(~/.bashrc)

# Supabase用コマンド
alias sb-start='npx supabase start'
alias sb-stop='npx supabase stop --no-backup'
alias sb-clean='npx supabase stop --no-backup 2>/dev/null; ~/bin/docker-reset.sh'

クイックリファレンス

症状 コマンド
ポートが使用中 sudo pkill -9 -f docker-proxy && sudo systemctl restart docker
Docker再起動でも解決しない sudo rm -rf /var/lib/docker/network && sudo systemctl restart docker
iptablesエラー sudo nft flush ruleset && sudo systemctl restart docker
全部ダメ ~/bin/docker-reset.sh

環境情報

  • OS: Ubuntu (WSL2)
  • Kernel: 6.6.87.2-microsoft-standard-WSL2
  • Docker: 28.4.0 / 29.3.0
  • iptables: v1.8.10 (legacy)
  • Supabase CLI: npx経由

参考

  • WSL2ではDockerの状態が壊れやすい
  • iptablesはlegacyモードの方がDockerとの互換性が高い
  • docker.socketが有効だと、Dockerへのアクセス時に自動起動される
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?