WSL2のDocker環境でMySQLをLaravelとDBeaverから接続する方法

WSL2上でLaravelの開発環境をDockerで構築する場合、MySQLもDockerコンテナで動かす構成がよく使われます。

今回は、MySQLのポートを「3307」に変更した場合に、
WSL2側のLaravelとWindows側のDBeaverから接続する方法を紹介します。

Docker Composeの設定

compose.ymlを以下のようにします。

services:
app:
build: .
ports:

  • “8080:80”
    depends_on:
  • db

db:
image: mysql:8.0
environment:
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root
ports:

  • “3307:3306”

ここで重要なのが、

“3307:3306”

という設定です。

左側の「3307」がホスト側のポート、
右側の「3306」がMySQLコンテナ側のポートです。

つまり、

Windows / WSL2 → 3307 → MySQLコンテナ → 3306

という構成になります。

LaravelからMySQLへ接続

LaravelはWSL2のDockerコンテナ内で動作しているため、MySQLのサービス名「db」を指定します。

.env

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=password

ここでDB_PORTを「3307」にしないのがポイントです。

LaravelとMySQLはDocker内で直接通信するため、
Laravelから見たMySQLのポートはコンテナ側の「3306」です。

Windows側のDBeaverから接続

Windows上で動作しているDBeaverから接続する場合は、
ホスト側に公開した「3307」を指定します。

DBeaverの設定例:

Host : localhost
Port : 3307
Database : laravel
Username : laravel
Password : password

DBeaverからは、

localhost:3307

に接続すると、DockerコンテナのMySQL「3306」へ接続されます。

まとめ

MySQLのポートを3307に変更した場合でも、
接続元によって指定するポートが異なります。

Laravel
→ DB_HOST=db
→ DB_PORT=3306

WindowsのDBeaver
→ Host=localhost
→ Port=3307

「3307:3306」の左側はホスト側、
右側はコンテナ側のポートです。

そのため、Dockerコンテナ間の通信では「3306」、
Windows側のDBeaverから接続するときは「3307」を指定します。

WSL2+Docker環境でMySQLに接続できない場合は、
まず「どこからMySQLへ接続しているのか」と「ホスト側・コンテナ側のどちらのポートなのか」を確認すると、原因を切り分けやすくなります。

木曜日担当:nishida



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム