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