最近、久しぶりにDockerを触ったら、Docker for Macという便利なものになっていたので、ちょっと色々と試してみた。
そこで、起きたのが公式MySQLコンテナをDocker for Macで起動した際に外部から接続(リモート接続)ができないという問題。
$ mysql -u root -p -h 127.0.0.1 --port 3306
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
hostをlocalhost、portを3306としてmysqlに接続しにいこうとしたところエラーが発生。
あまり深く考えていなかったのだが、どのようなport設定で起動されているのか分かっていなかったので、Dockerの状態を確認してみる。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99999999fac0 mysql "docker-entrypoint.sh" 8 hours ago Up About an hour 3306/tcp mysql_db_1
確認したところ、上記のように起動されており、少し調べたところhostやportがうまく設定されていなかったっぽい。
そこで、以下のようにdocker-compose.ymlでport部分を指定する
mysql:
image: mysql
ports:
- 127.0.0.1:3333:3306
その後、再起動。
$ docker-compose up
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99999999fac1 mysql "docker-entrypoint.sh" About an hour ago Up 6 minutes 127.0.0.1:3333->3306/tcp mysql_db_1
設定した内容で問題なくmysqlに接続することができた。
$ mysql -u root -p -h 127.0.0.1 --port 3333
ただ、これだとDockerコンテナ同士のlinkに少し不具合が出たので、最終的に以下のようにdocker-compose.ymlを修正。
mysql:
image: mysql
ports:
- 3333:3306
その後、再び再起動。
$ docker-compose up
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99999999fac1 mysql "docker-entrypoint.sh" About an hour ago Up 6 minutes 0.0.0.0:3333->3306/tcp mysql_db_1
hostの部分が修正されたことが分かる。これで、コンテナ同士のlinkも外部から接続も問題なくできた。
今回の原因は色々とあったものの解決方法のみ備忘録として残しておく。