はじめに
Docker環境で開発中に、コンテナ内で「rails g model ~」や「rails db:migrate」により、テーブルを作成したので、作成したテーブルなどを確認するために、MySQLを起動させようとしたところ、以下のとおり、起動しませんでした。
$ mysql -u root -p
bash: mysql: command not found
あれ、MySQL入っているはずなのに、なぜだろう?
開発環境
・Ruby on Rails 6.1.4
・MySQL 8.0.25
・Docker 20.10.7
・docker-compose 1.29.2
原因と対応
私はrailsコマンドを使用するために、Dockerをバックグラウンドで起動させた後、次のコマンドによりコンテナに入って作業をしていました。
$ docker-compose exec web bash
そうです、webコンテナ(=railsのコンテナ)の中で、mysqlコマンドを実行しようとしていたのです。
気を取り直して、webコンテナからexitし、以下のコマンドを実行します。
$ docker-compose exec db bash
これでdbコンテナ(MySQLのコンテナ)に入ることができ、無事、mysqlコマンドが実行できるようになりました。
もちろん、コンテナに入らずに直接、次のコマンドを入力してもOKです。
(これなら、コマンドにコンテナ名が入っているので、最初から気がついていたような気もしますが…)
$ docker-compose exec db mysql -u root -p
おわりに
原因がわかれば何とも単純な話ですが、エラーが出るとあれこれ調べて、よくわからない方向へ行ってしまい、いつの間にか時間ばかりが過ぎているというのは、初心者あるあるかと思います。
同じことをやらかしてしまった人が、この記事にたどり着いてくれれば、嬉しく思います。