【ITニュース解説】windows側からWSL docker上 MySQLへ接続できないエラー解決備忘録
2025年09月18日に「Qiita」が公開したITニュース「windows側からWSL docker上 MySQLへ接続できないエラー解決備忘録」について初心者にもわかりやすく解説しています。
ITニュース概要
WindowsからWSLのDockerで動くMySQLへ、localhost経由で接続できない問題の解決策をまとめた。システムエンジニアを目指す初心者でも理解できるよう、初歩的ながらもハマりやすい接続トラブルの対処法を解説する記事。
ITニュース解説
今回の記事では、Windows環境からWSL(Windows Subsystem for Linux)上のDockerコンテナで動作しているMySQLデータベースへ接続しようとした際に発生する、一般的なネットワーク接続の問題とその解決方法について解説する。システムエンジニアを目指す初心者にとって、複数の技術要素が組み合わさる開発環境では、このようなネットワーク設定の理解が不可欠となるため、ここでその基礎をしっかりと押さえておきたい。
まず、問題の背景にある各技術要素について簡単に説明する。普段皆さんが使っているWindowsは、コンピューター全体を管理するオペレーティングシステム(OS)であり、アプリケーションを実行するための土台となる。次に登場する**WSL(Windows Subsystem for Linux)**は、Windows上でLinux環境を直接実行できるようにするマイクロソフトの機能である。これにより、Windowsユーザーは、Linuxで広く使われている開発ツールやコマンドライン環境を、仮想マシンを使うよりも手軽に利用できるようになった。WSLは、Windowsと密接に連携しつつも、内部的には独立したネットワーク空間を持っている点が今回の問題の鍵となる。
そして、Dockerは、アプリケーションとその実行に必要なすべての要素(ライブラリ、設定ファイルなど)を「コンテナ」と呼ばれる独立したパッケージにまとめて管理・実行する技術である。これにより、開発環境と本番環境の間での設定のズレを防ぎ、どこでも同じようにアプリケーションを動かせるメリットがある。データベースであるMySQLも、Dockerコンテナとして起動することで、簡単に環境を構築し、他のアプリケーションから利用できるようになる。MySQLは、Webサイトのユーザー情報や商品データなど、構造化されたデータを効率的に保存、管理するためのリレーショナルデータベース管理システム(RDBMS)の一つで、Webアプリケーション開発において非常に広く利用されている。
今回の問題は、「Windows側のクライアントから、WSL上のDockerコンテナで稼働しているMySQLへlocalhost経由で接続できない」というものだった。ここで初心者がつまずきやすいのは、localhostという言葉の解釈である。通常、localhostは「自分自身」を指すアドレスだが、今回の環境では、WindowsにとってのlocalhostはWindows自身であり、WSL環境は別の「コンピューター」のように扱われる。さらに、WSL内のDockerコンテナはWSL環境から見ても隔離された空間に存在するため、単純にlocalhostと指定するだけでは、WindowsからWSL内のDockerコンテナに直接接続することはできないのである。
この接続問題を解決するためには、主に二つの重要な設定変更が必要となる。一つは、MySQLサーバー自身の接続設定の変更だ。MySQLはデフォルトでセキュリティを考慮し、127.0.0.1(つまりlocalhost)からの接続のみを許可するように設定されていることが多い。この設定はmy.cnfなどのMySQLの構成ファイル内のbind-addressという項目で管理されている。WindowsからWSL内のMySQLへ接続するためには、MySQLがlocalhost以外のIPアドレスからの接続も受け入れるように、このbind-addressの値を0.0.0.0に変更する必要がある。0.0.0.0を設定すると、MySQLはすべてのネットワークインターフェースからの接続を受け入れるようになる。これにより、WSL環境内のネットワークからだけでなく、Windows環境からもMySQLへアクセスできる土台が整う。ただし、0.0.0.0はセキュリティリスクも伴うため、本番環境での利用には慎重な検討が求められる設定である。
もう一つの重要な設定は、Dockerのポートマッピングである。DockerコンテナはホストOS(この場合はWSLのLinux環境)から隔離されたネットワーク空間で動作しているため、外部からコンテナ内のサービスにアクセスするには、「ポートマッピング」という設定が必要だ。ポートマッピングとは、ホストOSの特定のポート番号と、コンテナ内の特定のポート番号を紐づけることである。MySQLはデフォルトで3306番ポートを使用するため、例えばdocker runコマンドでコンテナを起動する際に-p 3306:3306というオプションを付けるか、docker-compose.ymlファイルでポート設定を行うことで、WSLのLinux環境の3306番ポートへのアクセスが、コンテナ内のMySQLの3306番ポートへ転送されるようになる。これにより、WindowsはWSLのIPアドレス(例えば172.17.0.xのような内部IP)と3306番ポートを指定することで、最終的にDockerコンテナ内のMySQLへ接続できるようになる。WSLのIPアドレスは、WSLのターミナルでip addrコマンドを実行することで確認できる。
このように、今回の接続問題は、Windows、WSL、Docker、MySQLという複数の技術要素がそれぞれ独自のネットワーク環境を持ち、相互に連携する際に発生する典型的なネットワーク設定の問題である。システム開発においては、異なる環境がどのように通信し、どのような設定が必要となるのかを理解することが非常に重要となる。今回の経験を通して、localhostの概念、MySQLのbind-address設定、そしてDockerのポートマッピングといった基本的ながらも重要なネットワーク設定の知識を習得し、今後のシステムエンジニアとしての学習に役立ててほしい。