Windows 10 Home(WSL2)のDockerでMySQL立ち上げてWindows側からA5:SQL Mk2で接続してみる
Windows 10 HomeにWSL2でUbuntu18.04を導入して、dockerで作成したMySQLにWindows 10 Home側から接続しようとした際に、ハマってしまったので手順をまとめました。
WSL2+docker+MySQL環境イメージ
今回構築する環境のイメージ図です。
環境構築手順
docker-composeでMySQLコンテナを構築するまでに必要な手順は以下の通りです。
- Windows 10 HomeにWSL2をインストール
- WSL2上にUbuntu18.04をインストール
- WSL2のUbuntu18.04にdockerをインストール
- WSL2のUbuntu18.04にdocker-composeをインストール
- docker-composeでMySQLコンテナを起動する
Windows 10 HomeにWSL2をインストール
WSL2のインストールがまだの場合は、以下の記事を参考にインストールしてください。
WSL2上にUbuntu18.04をインストール
WSL2にUbntu18.04のインストールがまだの場合は、以下の記事を参考にインストールしてください。
WSL2のUbuntu18.04にdockerをインストール
dockerのインストールがまだの場合は、以下の記事を参考にインストールしてください。
WSL2のUbuntu18.04にdocker-composeをインストール
docker-composeのインストールがまだの場合は、以下の記事を参考にインストールしてください。
docker-composeでMySQLコンテナを起動する
MySQLのdockerコンテナを起動するために以下の2つのファイルを同じディレクトリに作成しましょう。
Dockerfile
FROM mysql:5.7
元となるdokerイメージにmysql:5.7を指定します。
docker-compose.yml
version: "3.2"
services:
mysql_test:
build: .
restart: always
environment:
MYSQL_DATABASE: mydb
MYSQL_USER: admin
MYSQL_PASSWORD: admin
MYSQL_ROOT_PASSWORD: yourpassword
ports:
- "9999:3306"
volumes:
- "db-data:/var/lib/mysql"
networks:
- db_network
volumes:
db-data:
networks:
db_network:
driver: bridge
7行目~10行目:MySQLのDB名やユーザ・パスワードですので、適宜設定してください。
12行目:MySQLのポートフォワード設定ですが、今回はあえて違いが分かるように「3306」から「9999」に変更しています。
MySQLコンテナを起動する
「docker-compose.yml」ファイルのあるディレクトリで、以下のコマンドを実行しましょう。
$ docker-compose up -d
MySQLが起動しているか確認してみましょう。
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------
mysqltest_mysql_test_1 docker-entrypoint.sh mysqld Up 0.0.0.0:9999->3306/tcp, 33060/tcp
portsが「0.0.0.0:9999->3306」となっていれば成功です。
では、Windows側から起動したMySQLに接続してみましょう。
Windows側のA5:SQL Mk2でdockerコンテナのMySQLに接続する
ではようやくWindows側からdokerコンテナのMySQLに接続してみましょう。
今回は、MySQLに接続するクライアントソフトとして、A5:SQL Mk2を利用して説明しますが、お好きなツールでも大丈夫です。
ツリービューの「データベース」を右クリックし、「データベースの追加と削除」を選択します
「データベースの追加と削除」画面が表示されますので、「追加」ボタンをクリックします。
「MySQL/MariaDB(直接接続)」を選択します
接続情報を登録します。
ここで、ポイントがあります。
ホスト名は「127.0.0.1」ではありません。
これはWSL2を利用しているためです。ではWSL2のUbuntuと接続できるIPアドレスの調べましょう。
WSL2のUbuntuと接続できるIPアドレスの調べ方
WSL2のUbuntuで以下のコマンドを実行します。
ifconfig
実行結果が以下のように表示されます。
$ ifconfig
br-1423583bd1d9: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
inet6 fe80::42:f2ff:fea0:d754 prefixlen 64 scopeid 0x20<link>
ether 02:42:f2:a0:d7:54 txqueuelen 0 (イーサネット)
RX packets 115 bytes 170525 (170.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 121 bytes 7496 (7.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
br-a8e545a39129: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.19.0.1 netmask 255.255.0.0 broadcast 172.19.255.255
inet6 fe80::42:2cff:fe83:14c prefixlen 64 scopeid 0x20<link>
ether 02:42:2c:83:01:4c txqueuelen 0 (イーサネット)
RX packets 57 bytes 3540 (3.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 71 bytes 5070 (5.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:8f:bb:9a:09 txqueuelen 0 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.21.142.238 netmask 255.255.240.0 broadcast 172.21.143.255
inet6 fe80::215:5dff:fee9:67c5 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:e9:67:c5 txqueuelen 1000 (イーサネット)
RX packets 309460 bytes 224153348 (224.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 190280 bytes 296888991 (296.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (ローカルループバック)
RX packets 1634 bytes 5729314 (5.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1634 bytes 5729314 (5.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethad08042: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::cb6:87ff:feac:a78c prefixlen 64 scopeid 0x20<link>
ether 0e:b6:87:ac:a7:8c txqueuelen 0 (イーサネット)
RX packets 57 bytes 4338 (4.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 85 bytes 6146 (6.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
複数のIPアドレスが表示されますが、「eth0」に表示されているものが正解です。
上記の場合は「172.21.142.238」です。
Windowsのコマンドプロンプトで確認してPINGコマンドで応答があれば、そのIPアドレスをMySQL接続の設定画面のホスト名に入力しましょう。
「テスト接続」ボタンをクリックして「接続に成功しました」と表示されれば完了です。
ツリービューで「mysql」データベースのテーブルが参照できました
まとめ:ポイント
WSL2を利用してdocker環境を構築していたため、127.0.0.1で接続できなかったのでハマってしまいました。
同じことで悩まれている方がいればご参考にしていただければと思います。
ちなみに、Ubuntu上からは「127.0.0.1」でmysqlのコマンドで接続できます。
$ mysql -h 127.0.0.1 -P 9999 -u root -D mysql -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>