1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLのネットワーク理解をして、dockerを利用したDBコンテナにTablePlusから接続しよう

Posted at

この記事が対象にしている状況

次のような状況で「Windowsアプリ(TablePlus)から localhost:5432 に繋いでも届かない」ことがあります。

  • WSL2は仮想マシンとして動作し、Windowsとは別のネットワーク空間を持つ
  • Windowsの 127.0.0.1 と、WSL2内の 127.0.0.1別物
  • 構成によっては、Windows側の localhostWSL側へ転送されない

その結果、TablePlusから localhost:5432 で接続できないことがあり、その場合は WSLのIP(172.x…)に直接接続することで解決できます。


発生した問題

TablePlusで以下の設定で接続しようとしたが失敗する。

  • Host: 127.0.0.1(または localhost
  • Port: 5432

エラー例:

connection to server at "127.0.0.1", port 5432 failed: Connection refused

原因

  • WSL2は独立した仮想マシンとして動作するため、Windowsの localhost はWindows自身を指す
  • WSL内で動いているPostgreSQLは、WSL側のネットワーク(例: 172.xx.xx.xx)に存在する
  • そのため、構成によっては Windowsの localhost からWSL内のPostgreSQLに到達できない

トラブルシューティング(内側→外側)

1) WSL内でPostgreSQLが動いているか確認

Dockerの場合:

docker ps --format 'table {{.Names}}\t{{.Ports}}'

2) WSL内でPostgreSQLが待ち受けているか確認

(例:5432で待ち受けているか)

ss -ltnp | grep 5432
  • 0.0.0.0:5432 / *:5432 が出れば「WSLの外部IFでも待ち受け」の可能性が高い

    • つまりlocalhostでの設定でき接続できる可能性がある
    • 以下の様な感じ
    • image.png
  • 127.0.0.1:5432 しか出ない場合、WSL IPでは届かないので Postgresのlisten設定やDockerの公開設定を見直す

    • これがまさにwsl側の自身のIPを示すアドレスを設定しなければいけない
    • 以下の様な感じ
    • image.png

3) WSLのIPアドレスを取得

ip addr show eth0 | grep 'inet '
# または
hostname -I

例:172.18.245.28


解決方法(TablePlusでWSL IPに直接接続)

TablePlusの接続設定を以下に変更する。

  • Host: 127.0.0.1WSLのIP(例: 172.18.245.28
  • Port: 5432
  • User: (例: postgres
  • Password: (例: postgres
  • Database: 空欄でもOK(接続後に選択)
  • SSL mode: PREFERRED(ダメなら DISABLED

結果

WSLのIP指定で接続することでTablePlusから正常に接続でき、DBのテーブルやマイグレーション結果を視覚的に確認できるようになった。


学んだこと

  • WSL2は仮想マシンであり、独自のIPアドレス空間を持つ
  • Windowsの localhost はWSL2内の localhost とは別物
  • トラブルシューティングは「内側(WSL内)→外側(Windowsアプリ)」の順で確認すると早い
  • WSLのIPアドレスは再起動で変わる可能性があるため、hostname -I で都度確認が必要な場合がある

注意(このエラーのときは話が別)

もし localhost:5432 でのエラーが password authentication failed の場合は、「届いてはいるが、別のPostgreSQLに繋がっている(誤接続)」可能性が高いです。
その場合は、Windows側で 5432 を掴んでいるプロセス確認(例:netstat -ano | findstr :5432)も併せて確認してください。


1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?