(docker)(Laravel)マイグレーション時、could not find driver のエラー

docker-laravel-migration-could-not-find-driver

 

dockerで構築したlaravel環境で、マイグレーションしたら下記のようなエラーが出た。

could not find driver

 

「could not find driver(ドライバーが見つからない)」とエラーが出ている。
原因を調べてみたところ、以外と簡単に解決できたので、原因と解決策を紹介していく。

 

could not find driver のエラーが出る原因

調べたところ、could not find driverというエラーが出る原因は、
PDO(PHP Data Object)がDBを操作するために必要な「ドライバ」と言うものがないことが原因だそうだ。

could not find driver のエラーが出る原因

PDO(PHP Data Object)がDBを操作するために必要な「ドライバ」と言うものがないことが原因

 

どうやら使用中のphpイメージでは、デフォルトでsqlite用ドライバしかないらしい。

 




インストール済みPHP拡張モジュールを確認してみる

まずは必要なドライバがないことを確認してみる。

下記コマンドで現在のPHP拡張モジュール一覧を調べることができる
※dockerのphpコンテナ内で実行すること!

# PHP拡張モジュール一覧を表示する

php -m
インストール済みphp拡張モジュールの確認コマンドの結果の画像

 

pdo関連のドライバは上記の様にsqlite用のものしか入っていなさそうなことが分かる。

 

could not find driver の解決策

could not find driverというエラーは、
mysqlのドライバ(pdo_mysql)をインストールすることで解決可能だ。

 

could not find driver の解決策

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拡張モジュールを確認してみると、

インストール済みphp拡張モジュールの確認コマンドの結果の画像2

 

pdo_mysqlドライバがインストールされているのが確認できる。

と言うことで、この状況で改めてphp artisan migrateすると、マイグレーションが成功するはず。

 

 

(docker)(Laravel)マイグレーション時、php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not knownのエラー

 

https://www.docker.com/

http://laravel.jp/

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。