Edited at

WSLからDocker上で動いているMYSQLにアクセスしたらエラー出た話


はじめに

タイトルの通りですが、WSL(Debian)からホストPC(Windows10)のDockerで動いてるMySQLにアクセスしようとしたら詰まったのでその解決策置いときます。


何をしたか


Docker上でMySQLを動かす


Windows10

docker run --rm -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0.16



WSLからアクセス

WSL上でmysql-clientをapt-get


Debian(WSL)

sudo apt-get install mysql-client


WSLからMySQLにアクセス


Debian(WSL)

mysql -u root -h localhost -p


で↓のエラーが出た。


Debian(WSL)

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")


どうやらWSL上のMySQLサーバーにアクセスしようとしているらしい。

けど実際にはサーバーが立ってないのでエラーが出てる。

ただ、WSLからlocalhostを指定してホストPCのポートにアクセスできないわけではないらしく、


Windows10

docker run --rm -p 80:80 nginx:alpine


でnginxを動かし、WSL上で


Debian(WSL)

wget localhost


とすると確かにアクセスできている。


解決策

ホストPCのIPアドレスをipconfigなんかで調べて直接指定するとアクセスできた。


Debian(WSL)

mysql -u root  -h 192.168.11.8 -p


あとMySQLのバージョンは8だったためdefault_authentication_pluginの設定を変える必要があったがそれはいろんなサイトでさんざん解説されてるので割愛。