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
コメント