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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Docker

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

Q&A

解決済

1回答

2971閲覧

ローカルのMySQLコンテナにphpMyAdminから接続したい

k_takahashi

総合スコア6

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Docker

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

0グッド

0クリップ

投稿2021/11/10 08:22

docker-compose.ymlで立てたローカルのMySQLコンテナに、phpMyAdminで接続したいのですがうまくいきません。
docker-compose.ymlにphpMyAdminのコンテナは追加しない方法で接続したいと考えています。
実行した内容としては、下記二つです。

接続先をMySQLコンテナ名に指定する

MySQLコンテナに"db"というコンテナ名をつけ、下記コマンドを実行しました。

docker pull phpmyadmin/phpmyadmin docker run --name local-db -d -e PMA_HOST=db -p 8080:80 phpmyadmin/phpmyadmin

上記コマンドを実行すると、phpMyAdminコンテナの起動はでき、phpMyAdminのページを開くことはできました。
しかし、MySQLサーバーにログインしようとすると下記のようなエラーメッセージが表示されログインできませんでした。

mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known

phpMyAdminコンテナでは下記のようなログが出力されています。

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Wed Nov 10 08:00:03.449451 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.20 configured -- resuming normal operations [Wed Nov 10 08:00:03.449522 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND' 172.17.0.1 - - [10/Nov/2021:08:00:10 +0000] "GET / HTTP/1.1" 200 6488 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 172.17.0.1 - - [10/Nov/2021:08:00:20 +0000] "POST /index.php?route=/ HTTP/1.1" 200 6636 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"

接続先をMySQLコンテナのipに指定する

docker inspect [MySQLコンテナのID]でコンテナのIPAddressを取得して
下記コマンドを実行しました。

docker run --name tsunamo-local -d -e PMA_HOST=172.18.0.2 -p 8080:80 phpmyadmin/phpmyadmin

こちらもphpMyAdminのページを開くことはできるのですがログインできず、下記のようなエラーメッセージが表示されます。

mysqli::real_connect(): (HY000/2002): Connection timed out

phpMyAdminコンテナでは下記のようなログが出力されています。

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Wed Nov 10 08:13:27.103408 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.20 configured -- resuming normal operations [Wed Nov 10 08:13:27.103473 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND' 172.17.0.1 - - [10/Nov/2021:08:13:34 +0000] "GET / HTTP/1.1" 200 6484 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 172.17.0.1 - - [10/Nov/2021:08:14:38 +0000] "-" 408 0 "-" "-" 172.17.0.1 - - [10/Nov/2021:08:13:46 +0000] "POST /index.php?route=/ HTTP/1.1" 200 6597 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"

ローカルのMySQLコンテナにA5で接続してみると接続できたので、MySQLコンテナに問題はなさそうです。
どなたか解決方法をご教示いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

dockerではコンテナ間で通信するには同一のネットワークに接続する必要があります。
参考 https://knowledge.sakura.ad.jp/16082/

docker-composeでスタックされたコンテナの場合、自動的にネットワークが作成されて、暗黙に同一ネットワークに接続されることになりますが、
それとは別に立ち上げたコンテナから通信する場合は、あらかじめ作成したネットワークに両者を接続するようにする必要があります。
(docker-composeが生成するネットワーク名を調べて接続してもかまいません)

追記

具体的な手順の例としては以下のような感じです。

ネットワーク作成

$ docker network create mysql-network --attachable

docker-compose.ymlを修正して起動

yml

1version: "3.8" 2 3services: 4 mysql: 5 image: mysql:5.7 6 environment: 7 MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 8 networks: 9 - mysql-network 10 11networks: 12 mysql-network: 13 external: true
$ docker-compose up -d

phpMyAdmin起動

Dockerネットワーク内ではIPアドレスを直接参照する必要は無く、コンテナ名(ホスト名)でアクセスできます。

$ docker run -d -e PMA_HOST=mysql --net mysql-network -p 8080:80 phpmyadmin/phpmyadmin

投稿2021/11/10 08:43

編集2021/11/10 09:11
surface_0

総合スコア497

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

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

k_takahashi

2021/11/11 00:13

わかりやすい回答ありがとうございます。 ただ、できればdocker-compose.ymlに手を加えない方法で接続出来ないかなと考えております。 やっぱり難しいでしょうか。
surface_0

2021/11/11 02:50

ローカル環境なのにそこまで手を加えたくない理由がいまいちよくわかりませんが、 一応回答にも記述してありますとおり、docker-composeのスタックには何もしなくても自動でネットワークが作成されるので、 その名前を調べて({プロジェクト名}_defaultがデフォルト名)、同様に接続すれば可能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問