docker環境下でphpからtableを作成しようと、mysqliを使おうとしたら手こずった備忘録。
環境
・Macbook air 2020 M1
・Docker v25.0.2
・php v8.3.6
・Mysql v8.3
1.Call to undefined function mysqli_connect()はmysqliのインストールで解決
Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/data/dbcreate.php:15
mysqli_connectが機能していないと。
なんと、php7.0以降はmysqliが入ってないので、mysqliをDLする必要がある。
phpのモジュールインストール状況を見ると
root@465201bc8bff:/var/www/html# php -m | grep mysqli
root@465201bc8bff:/var/www/html#
mysqliは確かに入ってない。
なのでまずapp/Dockerfileにphpの拡張機能としてmysqliをインストールするよう
RUN apt update \
&& apt install -y apache2 \
&& docker-php-ext-install mysqli
を追記。
※ $ php-mで出力されたモジュールが、拡張機能として追加できるものなので、そのテキストを入力すればインストールできるってわけだ。
コンテナをリビルドしたところ
% php -m | grep mysqli
mysqli
インストール完了。
メモ:Dockerfileの修正を反映させるだけなら
$docker-compose up -d --build
でOK。
2.Access denied for userはボリュームの削除で解決
何度目の正直かFatal error: Uncaught mysqli_sql_exception: Access denied for user 'msr'@'192.168.48.3' (using password: YES) in /var/www/html/data/dbcreate.php:15
同じ行で新しいエラー。Access deniedとのこと。
どうやら同名のボリュームが原因のよう。
ボリューム削除を含めてコンテナを停止するには
$ docker-compose down -v
コンテナを再度立ち上げてDB(msr)ができているか確認
> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| msr |
| mysql |
| performance_schema |
| sys |
+--------------------+
できた!
テーブルも確認し
> show tables;
+---------------+
| Tables_in_msr |
+---------------+
| category |
| user |
+---------------+
こうして文章に書き起こすと何てことないですが、正解に辿りつくまで時間かかりますな。
参考:
docker-composeでPHPのLAMP環境作ったけど、apt-getでmysqliがインストールされなくドハマりしたのでメモ
https://qiita.com/4roro4/items/afd501c0a9a27c4dd7ec
立ち上げたMySQLのDockerコンテナでAccess deniedされた時の対処
https://zenn.dev/tojima/articles/32bbfe85dd0022