Dockerコンテナ内のMySQLサーバ接続時のエラーに対応する > "ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0"



ローカル上のアプリケーションからDockerコンテナ内にあるMySQLサーバに接続する箇所でエラーが発生していました。
そこでターミナルから直接MySQLサーバに接続できるか確認してみます。

$ mysql -u root -h 127.0.0.1 --port 23456 devdb    
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

むむ、どうやら繋がらない模様。

このエラーの解決策をググってみると、「アクセス許可」がどうやらポイントになっているという記事がいくつか見つかりました。

qiita.com
next49.hatenadiary.jp

しかしながら、いずれの対応をしても解決しませんでした。
上記の記事は、外部サーバーの時であり、今回はDockerコンテナ上だったので改めて原因を調査し直すことにしました。

そもそもコンテナ上に接続したいDBが立ち上がっているのか確認してみます。

$ docker ps                                                                                                          
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                                           NAMES
8e7135ec79c9        redis:2.8                                  "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:26379->6379/tcp                         devkvs
4981e5395dc3        mariadb:10.0                               "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:23307->3306/tcp                         devdb_ut

むむ、接続先のdevdbが無い。
どうやら何らかの理由で立ち上がっていなかったので手動で立ち上げてみます。

$ docker-compose start db                                                                                                                                   
Starting db ... done

立ち上がっているか再度確認。

$ docker ps                                                                                                          
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                                           NAMES
8e7135ec79c9        redis:2.8                                  "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:26379->6379/tcp                         devkvs
5788483bbefa        mariadb:10.0                               "docker-entrypoint.sh"   About an hour ago   Up 28 seconds       0.0.0.0:23306->3306/tcp                         devdb
4981e5395dc3        mariadb:10.0                               "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:23307->3306/tcp                         devdb_ut

devdbがリストにあるので立ち上がりました。
再度、ターミナルから接続し直してみます。

$ mysql -u root -h 127.0.0.1 --port 23456 devdb -p
Enter password:
mysql>

無事に繋がりました。

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

Docker実践入門――Linuxコンテナ技術の基礎から応用まで (Software Design plus)

Docker実践入門――Linuxコンテナ技術の基礎から応用まで (Software Design plus)