====== webコンテナからDBコンテナに接続しようとして bash: mysql: command not found と出るとき ======
docker-compose.yml で webコンテナと DBコンテナを作成し、webコンテナから DB接続しようとした際に以下のエラーが表示されました。
$ mysql -h db_container_name -u docker -p
bash: mysql: command not found
結論から言うと、webコンテナにも MySQL をインストールすることでアクセス可能になりました。\\
webコンテナ側に MySQL がインストールされていないために、単純にコマンドが使えないだけというエラーでした。\\
web側の Dockerfile に以下を追加する。
# MySQL
RUN yum -y install mysql
上記でコンテナ起動後、再度 mysql 接続を試すと「caching_sha2_password」という以下のエラーが表示される場合。
$ mysql -h db_container_name -u docker -p
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
DBコンテナ側の MySQL が8.0以降なため表示されるエラーです。MySQL8.0から認証プラグインが caching_sha2_password に変更されたそうです。
この場合は、web側にインストールする MySQLも8.0以降にすることで対処可能です。
# 先程のこれを
RUN yum -y install mysql
# こんな感じに
RUN yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm \
&& yum -y install mysql-community-server
もしくは、DBコンテナ側の my.cnf で以下を指定することで、従来の認証プラグイン mysql_native_password を使うことができます。
[mysqld]
default_authentication_plugin= mysql_native_password