SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【docker】コンテナのphpからホストのMySQLに接続ができない

問題

phpのコンテナからホストで稼働しているMySQLに接続しようとしたのですが、つながらないのです。

# mysql -h host.containers.internal -u testuser -p
ERROR 2003 (HY000): Can't connect to MySQL server on '10.88.0.1' (111)

答え

応答があって拒否されたのなら接続ユーザーの作成などの問題ですが、

そもそもの接続ができないとなるとその前段階。

オチとしては、MySQL側が以下の設定をしていたので、拒否以前の問題でした。

[mysqld]
bind-address = 127.0.0.1

以下のように外部からの接続を受け付けるように変更すると、コンテナからも接続可能になりました。

[mysqld]
bind-address = 0.0.0.0

もしくは設定なし。

[mysqld]
#bind-address = 127.0.0.1

こうするとエラーメッセージが「接続できない」から「拒否されました」に変わるので、引き続き、ユーザー作成、権限設定をする。

例)
create user 'xxxxx'@'10.%' identifid by '****';
grant all on xxxx.* to 'xxxxx'@'10.%';

bind-address は複数書けないようなので、安全のために bind-address を指定するなら、コンテナのIPアドレスを書くことになる。

[mysqld]
bind-address = 10.88.0.50(例)

インターネットにさらされているVPSなどなら、ファイアウォールやパケットフィルタで外部からの接続は拒否すること。

関連するメモ

コメント