質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

解決済

1回答

233閲覧

WSL2上のDocker(MySQL)に、外部PCから接続したい

tmpteratail

総合スコア1

0グッド

0クリップ

投稿2024/11/11 12:12

編集2024/11/11 13:45

実現したいこと

Windows10の端末Aに、WSL2+Ubuntu+Docker(MySQL ver.5.5.55)を構築しました。
A5:SQL Mk-2(以下、A5M2)を使い、端末B(外部PC)から、
ホスト名:aa.aa.aa.aa (端末AのIPアドレスを指定)
ポート番号:13306
ユーザーID,パスワード,データベース(左記3項目は以下説明内で共通とします)
を指定することで、
端末Bから端末AのMySQLに接続したいです。
※端末Aと端末Bは、同じ社内ネットワーク上にあります。

前提

端末A内で、A5M2を使い、
ホスト名:localhost
ポート番号:13306
の他に、
ユーザーID,パスワード,データベース
を指定することで、Docker(MySQL)に接続できることを確認済みです。
また、端末Aのubuntu内で、hostname -Iで表示されるWSL2内のipアドレス(xx.xx.xx.xx)をメモし、
同じく端末Aで、A5M2を用いて、
ホスト名:xx.xx.xx.xx
ポート番号:13306
の他に、
ユーザー.パスワード,データベースを指定することで、
端末A内から接続可能であることを確認済みです。

発生している問題

端末BからA5M2で、
ホスト:aa.aa.aa.aa (端末AのIPアドレスを指定)
ポート:13306
の他に、
ユーザ, パスワード, データベース
で接続しても、
「接続に失敗しました。Lost connection to MySQL server during query」
と表示され、端末AのMySQLに接続できない状態です。

試したこと

端末A内の環境構築で実施した今回の質問に関係のありそうな所を以下に記述します。

Dockerコマンド:
docker run --name a-mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=test -d mysql:5.5.55

パワーシェルでポートフォワーディング:
netsh.exe interface portproxy add v4tov4 listenaddress=aa.aa.aa.aa listenport=13306 connectaddress=xx.xx.xx.xx connectport=3306

windowsのファイアウォール設定:
受信の規則で、新しい規則クリックで、13306と3306それぞれ追加

my.conf中身:
[mysqld]
skip-host-cache
skip-name-resolve
bind-address = 0.0.0.0
datadir = /var/lib/mysql
!includedir /etc/mysql/conf.d/

補足

端末A内で、A5M2で、
ホスト:aa.aa.aa.aa (端末A自身のIPアドレスを指定)
ポート:13306
の他に、
ユーザ, パスワード, データベース
としても、接続できません。
同じように、
「接続に失敗しました。Lost connection to MySQL server during query」
のエラーメッセージが表示されます。

何をすれば端末Bから端末AのMySQLへ接続できるようになるか教えていただければとおもいます。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tmpteratail

2024/11/11 14:26

回答ありがとうございます。 明日試してみます。少々お待ちください。
bsdfan

2024/11/11 14:43

portproxy の connectport は 3306 ではなく 13306 ではないでしょうか?
tmpteratail

2024/11/12 01:31

>hqf00342さん netsh interface portproxy delete v4tov4 listenaddress=<転送元(ホストOS)のipアドレス> listenport=<転送元ポート> で一旦削除し、 netsh.exe interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=13306 connectaddress=xx.xx.xx.xx connectport=3306 を実行しましたが、やはり端末Bから接続ができません。引き続き、よろしくお願いします。
tmpteratail

2024/11/12 01:41

>bsdfanさん 一旦削除し、 netsh.exe interface portproxy add v4tov4 listenaddress=aa.aa.aa.aa listenport=13306 connectaddress=xx.xx.xx.xx connectport=13306 で実施し直したところ、端末Bからも端末A自身からもホストを端末AのIPアドレス指定で接続できました!ありがとうございます。
tmpteratail

2024/11/12 14:39

コメントありがとうございます。bsdfanさんの回答をベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

ベストアンサー

WSL 上の Docker は、ポート 13306 で待っているので、portproxy の connectport は 3306 ではなく 13306 ではないでしょうか?

投稿2024/11/12 23:32

bsdfan

総合スコア4776

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問