dockerで構築したlaravel環境で、マイグレーションしたら下記のようなエラーが出た。
could not find driver
「could not find driver(ドライバーが見つからない)」とエラーが出ている。
原因を調べてみたところ、以外と簡単に解決できたので、原因と解決策を紹介していく。
could not find driver のエラーが出る原因
調べたところ、could not find driverというエラーが出る原因は、
PDO(PHP Data Object)がDBを操作するために必要な「ドライバ」と言うものがないことが原因だそうだ。
どうやら使用中のphpイメージでは、デフォルトでsqlite用ドライバしかないらしい。
インストール済みPHP拡張モジュールを確認してみる
まずは必要なドライバがないことを確認してみる。
下記コマンドで現在のPHP拡張モジュール一覧を調べることができる
※dockerのphpコンテナ内で実行すること!
# PHP拡張モジュール一覧を表示する
php -m

pdo関連のドライバは上記の様にsqlite用のものしか入っていなさそうなことが分かる。
could not find driver の解決策
could not find driverというエラーは、
mysqlのドライバ(pdo_mysql)をインストールすることで解決可能だ。
mysqlのドライバ(pdo_mysql)をインストールする。
pdo_mysql のインストール方法
pdo_mysqlのインストールは、以下の手順で実行可能だ。
①Dockerfileを修正する
Dockerfileを下記のように修正する。
FROM php:7.3-apache
# pdo_mysql(mysqlのドライバ)をインストールする
RUN docker-php-ext-install pdo_mysql
②Dockerfileを使ってphpイメージをビルドする
下記コマンドをDockerfileが存在する階層で実行し、phpイメージをビルドする。
docker build -t php:7.3-apache .
※「docker build -t イメージ名:タグ名 . 」する時は、
タグ名をdocker-composeで書いてあるタグ名に指定するよう気をつけよう
イメージがビルドできたら、コンテナを再起動する。
その後、もう一回コンテナ内でphp -mでインストール済みphp拡張モジュールを確認してみると、

pdo_mysqlドライバがインストールされているのが確認できる。
と言うことで、この状況で改めてphp artisan migrateすると、マイグレーションが成功するはず。
PDO(PHP Data Object)がDBを操作するために必要な「ドライバ」と言うものがないことが原因