発生したエラー
CodeIgniterで画面へアクセスした際に以下のエラーが発生しました。
Error:
Class "Redis" not found
原因調査
Redis拡張がPHPへインストールされているか確認しました。
確認コマンド:
docker exec php81 php -m | grep -i redis
結果:
redis
CLI環境ではRedis拡張が有効になっていることを確認しました。
しかし、ブラウザアクセスでは引き続きエラーが発生しました。
そのため、実際にアプリケーションが動作しているPHPコンテナを確認しました。
PHPコンテナの確認
Docker環境には以下のPHPコンテナが存在していました。
php81
php81-erp
それぞれRedis拡張を確認しました。
php81
docker exec php81 php -m | grep -i redis
結果:
redis
Redis拡張あり。
php81-erp
docker exec php81-erp php -m | grep -i redis
結果:
(何も表示されない)
php81-erp コンテナにはRedis拡張がインストールされていませんでした。
原因
今回ブラウザからアクセスしていたアプリケーションは、
php81-erp コンテナ上で動作していました。
そのため、CLIで確認した php81 コンテナではRedis拡張が有効でも、
実際に利用しているPHP環境ではRedisクラスを利用できずエラーになっていました。
また、Dockerfileには以下の設定が存在していました。
RUN pecl install redis && \
docker-php-ext-enable redis
しかし、Dockerfileを変更しただけでは既存コンテナへ変更内容は反映されません。
古いイメージから作成されたコンテナではRedis拡張が有効になっていませんでした。
解決方法
対象コンテナを再作成しました。
1. コンテナ停止
docker compose stop apache-erp
2. コンテナ削除
docker compose rm apache-erp
3. Dockerイメージ再作成
docker compose build --no-cache apache-erp
4. コンテナ起動
docker compose up -d apache-erp
5. Redis拡張確認
docker exec php81-erp php -m | grep -i redis
結果:
redis
Redis拡張が有効になったことを確認しました。
学んだこと
- Dockerfileを修正しただけでは既存コンテナへ変更は反映されない
- 環境変更を反映する場合はbuildし直す必要がある
- 複数PHPコンテナが存在する場合は、実際にアプリケーションが利用しているコンテナを確認する
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!