概要
dockerを触り始めてMySQLのコンテナを立ててみたものの、Macのターミナルから接続できずに結構ハマった話。似たような事象に陥ってる人が、もしこれで解消できる人がいればと思い記事にしました。
結論
コンテナの3306ポートをEXPOSEしていなかった。docker runで-Pオプションを付けて実行すると上手く接続できた。
before
$ docker run -d --name test-db -e MYSQL_ROOT_PASSWORD=password mysql/mysql-server
after
$ docker run -d --name test-db -e MYSQL_ROOT_PASSWORD=password -P --expose=3306 mysql/mysql-server
経緯とか
症状
作成したdockerコンテナに対して、Macのターミナルからmysqlコマンドで入ろうとしても、以下の通りエラー
$ mysql -h 127.0.0.1 -u user -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
エラー内容的にそもそもIPアドレスがわからないと言われている。
ネットで上手く接続できている人たちの記事を見ると、docker ps時のPORTSに0.0.0.0
があることに気がつく。というわけで、以下の記事を参考にEXPOSEしてみた。
EXPOSEする前
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35b706562745 mysql/mysql-server "/entrypoint.sh mysq…" About an hour ago Up About an hour (healthy) 3306/tcp, 33060/tcp test-db
EXPOSEした後
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42a9d040091a mysql/mysql-server "/entrypoint.sh mysq…" 14 minutes ago Up 14 minutes (healthy) 0.0.0.0:3306->3306/tcp, 0.0.0.0:32772->33060/tcp test-db
EXPOSE後のPORTS欄を見ると0.0.0.0:3306->3306/tcp
となっており、ローカルホストから接続できていることがわかる。
コピペで適当に作業していると何かあったときにハマりますね...