envファイルにDBの接続情報を記載し、コマンドで「php artisan migrate」を実行した所、タイトルのエラーが表示されました。
初歩的なミスが原因でしたが、同じように困っている方がいるかもしれませんので原因と解決方法を書きます。
環境について
Dockerのcompose.yamlは下記になります。
webディレクトリをローカルのLaravelディレクトリにしており「php artisan migrate」はローカルで実行しております。
services:
web:
container_name: web
build:
dockerfile: Dockerfile
volumes:
- 【Laravelのパス名】:/var/www/html
depends_on:
- mysql
mysql:
container_name: mysql
ports:
- "【ポート番号】:【ポート番号】"
environment:
MYSQL_ROOT_PASSWORD: 【パスワード】
原因
pdo_mysqlがdockerに入っていない事が原因でした。
下記のPHPファイルを作成して実行したところ、エラーになり気付きました。
<?php
$pdo = new PDO('mysql:host=【ホスト名】;dbname=【DB名】', '【ユーザーID】', '【パスワード】');
echo "Connected to the database!";
初歩的なミスでしたね…
解決方法
Dockerfileに下記を追加しpdo_mysqlをインストールしました。まずはphp.iniの下記のコメント削除
;extension=pdo_mysql
RUN docker-php-ext-install pdo pdo_mysql
コマンドを実行し再ビルド。念の為初期化してます。
docker-compose down --rmi all --volumes --remove-orphans
docker-compose build --no-cache
docker-compose up -d
Laravelのenvは下記で記載しております。
色々と検索した所、ホスト名はサービス名と書かれておりましたが、私はローカルで出来ました。
(ローカルでLaravelを実行しているから?)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=【ポート番号】
DB_DATABASE=【DB名】
DB_USERNAME=【ユーザ名】
DB_PASSWORD=【パスワード】
Docker難しいですね。
これでやっとLaravel開発出来そうです。