VSCode Remote ContainersからWSL2上のdockerで起動しているmysqlに手軽に接続する


前提環境

  • Windows10
  • WSL2/docker
  • VSCode Remote Containers

mysqlの設定(設定済みの人は読み飛ばしてください)

WSL2/dockerでのmysqlを起動する

WSL2上でdockerコマンドを使ってmysqlのイメージを取得・起動します。ホスト側の3306ポートとdocker内の3306ポートを接続しておきます。

docker pull mysql:5.6
docker run -it --name test-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.6
docker exec -it test-mysql bash -p

## mysqlへのログイン
mysql -u root -p -h 127.0.0.1

mysqlの設定

mysqlにログインして、ユーザの作成・権限の付与を行う。

-- version 確認
select version();

-- データベース作成
create database db1;
show databases;

-- ユーザの作成・権限付与
create user 'user'@'%' identified by 'password';
grant all on db1.* to 'user'@'%';

外部から接続できるようにmysqlの設定を変更する。

echo "bind-address = 0.0.0.0" >> /etc/mysql/conf.d/mysql.cnf

devcontainer(docker)でmysql-clientをインストール

mysql-clientのインストール

本当は.devcontainer/Dockerfileを修正してReopenしてあげるべきなのでしょうが、開きなおすのが手間なので、直接devcontainer内で実行してしまいます。

sudo apt update
sudo apt install default-mysql-client-core

devcontainerからmysqlへ接続

mysqlのdockerを起動する際にホスト(Windows)の3306ポートとdockerの3306ポートを接続しているので、devcontainerからホストの3306ポートに向けて接続をすると、ホスト経由でmysqlのdockerにアクセスできます。

mysql -u remoteuser -p -h host.docker.internal

3306ポートがmysqlのデフォルトなので特に指定する必要はありません。また、ホストのipはhost.docker.internalを利用して接続することができます。

参考