👌
【Rails7.1】Docker環境でCouldn't find database client: mysql, mysql5.の対処法
個人開発をしていた際、rails dbconsole
を実行したところ、以下のエラーが出ました。
Couldn't find database client: mysql, mysql5. Check your $PATH and try again.
原因がわかったので解決方法を備忘録としてまとめます。
問題
環境構築後、Railsのマイグレーションで不整合が発生したため、調査のためにMySQLの中身を見ようとしていました。
しかし、rails dbconsole
を実行したところ、Couldn't find database client: mysql, mysql5. Check your $PATH and try again.
とエラーが出てしまい、MySQLの中に入れない状況でした。
$ docker compose exec web bash
$ root@2cccb198027f:/sample-api# rails dbconsole
Couldn't find database client: mysql, mysql5. Check your $PATH and try again.
使っていたDockerfileとdocker-compose.yamlは次のとおりです。
Dockerfile
# syntax=docker/dockerfile:1
FROM ruby:3.2.2
WORKDIR /sample-api
COPY Gemfile /sample-api/Gemfile
COPY Gemfile.lock /sample-api/Gemfile.lock
RUN bundle install
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Configure the main process to run when running the image
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yaml
services:
db:
image: mysql:8.0
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
web:
build: .
volumes:
- .:/sample-api
ports:
- "3000:3000"
depends_on:
- db
volumes:
db-data:
解決方法
Dockerfileの中でmysql-client
をインストールしていないことが原因でした。
以下のようにDockerfileを修正します。
# syntax=docker/dockerfile:1
FROM ruby:3.2.2
# 下記の1行を追加
RUN apt-get update -qq && apt-get install -y default-mysql-client
WORKDIR /sample-api
COPY Gemfile /sample-api/Gemfile
COPY Gemfile.lock /sample-api/Gemfile.lock
RUN bundle install
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Configure the main process to run when running the image
CMD ["rails", "server", "-b", "0.0.0.0"]
mysql-client
ではなくdefault-mysql-client
としないとエラーが起きてしまうので要注意です。
修正が完了したらもう一度ビルドし、コンテナを立ち上げましょう。
$ docker compose build
$ docker compose up
コンテナの中に入り再度rails dbconsoleを実行してみると、、、
$ docker compose exec web bash
$ root@2cccb198027f:/sample-api# rails dbconsole
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.35 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [sample_api_development]>
MySQLコンテナの中に入ることができました!!
おわりに
Dockerは日々の業務でも使っていますが、Dockerfileを自力で書くにはもっとしっかりDocker周りの勉強をした方が良さそうだと感じました。
Discussion