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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1416閲覧

Dockerで起動したMySQLへWindowsアプリから接続したい

landy77

総合スコア1614

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

2クリップ

投稿2023/02/18 02:38

実現したいこと

ここしばらくDockerを頑張っていまして通常のLAMP的な環境だったり、Laravelのsailとかの環境はだいたい思い通りになるようになってきました。
お客さん側で古いWEBアプリがあったりでPHPのバージョン違いが多発するのでWSL2とDockerで切り替えて動作できる方が楽だとわかったのでWEBアプリ系はDockerへ移行させていってます。

次の段階で今までローカルの開発環境ではWindowsアプリ(C#)からXAMPPのMySQLへつないで開発していたのですが、XAMPPを自分の環境では廃止してMySQLとPhpMyAdmin部分をDockerで専用コンテナを作ってそこへC#アプリ用のDBを全部移行したいと思いました。

前提

Windows11でdocker-desktopを利用しています。

発生している問題・エラーメッセージ

C#での接続部分は接続文字列だけで言えば

userid=sail;password=password;database=app_db;Host=mysqldb;Port=3306;Pooling=True;Convert Zero Datetime=True;Convert Zero Datetime=True;SslMode=none;Character Set=utf8

今までとuserid password database Hostを変更しただけです。

エラーとしては
MySql.Data.MySqlClient.MySqlException: 'Unable to connect to any of the specified MySQL hosts.'
と出ているのでホストへ接続できないということだと思います。
Dockerのコンテナ側はPhpMyAdminも起動して立ち上がってDBへも接続しているので起動の確認だけは取れています。
それ自体のIDやPWが違うということは無いのだと思っています。
ホスト名が怪しかったのですがphpmyadmin自体はlocalhost:8080で起動しますが、mysqlへの接続ホストは「mysqldb」を記述するので、でmysqldbとしてdbサーバー名を定義しているのだと思いましたのでC#側からのホスト名はmysqldbとしました(localhostでもmysqldbでも今は接続出来ないのですが・・)

ですのでDocker側で動いているMySQL自体に外部公開するような処置をしないといけないのか?とは思いましたが情報が交錯していてわかりませんでした・・・
何か情報をいただけたらと思います。

補足情報

docker-compose.ymlはこの様になっています

docker

1version: '3' 2 3services: 4 mysqldb: 5 image: mysql:5.7 6 container_name: mysql57_container 7 environment: 8 MYSQL_ROOT_PASSWORD: P@ssw0rd 9 MYSQL_USER: mysqluser 10 MYSQL_PASSWORD: mysqlpassword 11 TZ: 'Asia/Tokyo' 12 volumes: 13 - ./docker/db/data:/var/lib/mysql 14 - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf 15 - ./docker/db/sql:/docker-entrypoint-initdb.d 16 ports: 17 - 3306:3306 18 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 19 phpmyadmin: 20 image: phpmyadmin/phpmyadmin 21 22 environment: 23 PMA_ARBITRARY: 1 24 PMA_HOST: mysqldb 25 # PMA_USER: root 26 # PMA_PASSWORD: P@ssw0rd 27 MEMORY_LIMIT: 256M 28 UPLOAD_LIMIT: 128M 29 30 ports: 31 - 8080:80 32 depends_on: 33 - mysqldb 34 volumes: 35 - ./docker/phpmyadmin/sessions:/sessions

といった感じです。
ユーザー名やパスワードはここに載せるために変えてあります。

よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/02/18 04:22

名前解決はできているのでしょうか?
yuma.inaura

2023/02/18 05:37

そのmysqldbはホスト名ではなくdockerのサービス名のような
退会済みユーザー

退会済みユーザー

2023/02/18 22:33

接続文字列にある Host=mysqldb にある mysqldb から ip アドレスが分からないと (それを「名前解決」という) 接続できません。 mysqldb に ping を打つと名前解決できていれば ip アドレスが表示されるのでやってみましょう。
guest

回答1

0

ベストアンサー

以下の手順で接続できると思います

1.Docker ネットワークを確認する

$ docker network ls NETWORK ID NAME DRIVER SCOPE f6765b394c35 bridge bridge local 61fa737dc2ad host host local 2ef71047f53f mysql_default bridge local

2.mysqlのネットワーク詳細を表示する

docker network inspect 2ef71047f53f

3.mysql接続先が172.18.0.2である事がわかる

※接続先に172.18.0.2ではなくmysqldbを指定したいのであればC:\Windows\System32\drivers\etc\hostsに以下を追記すれば良いでしょう。

172.18.0.2 mysqldb

※環境によって表示されるIPアドレスは異なります。
※場合によってはdocker-compose.ymlでネットワークを定義してIPアドレスの固定化などを考慮しても良いと思います。

投稿2023/02/18 04:57

編集2023/02/18 04:58
gklipxhh

総合スコア29

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

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

landy77

2023/02/19 18:31

ありがとうございました。 IPの調べ方は大変勉強になりました。 提示いただいたやり方でIP等は調べられましたが結局接続できませんでした(エラーも変わらず) 今回最終的に解決に至ってないのですがとりあえずXAMPPを立ち上げて作業だけは続きをやることにしました。 今の作業が終わり次第、もう少し細かく調べたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問