【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などなら、ファイアウォールやパケットフィルタで外部からの接続は拒否すること。
コメント