Windows 10 Home(WSL2)のDockerでMySQL立ち上げてWindows側からA5:SQL Mk2で接続してみる

2020年3月7日Docker

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>

Docker

Posted by snow