0
0

【docker】mysqli_connect()に失敗しAccess deniedした時の対処

Posted at

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のインストールで解決

% docker-compose exec app php data/dbcreate.php
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はボリュームの削除で解決

何度目の正直か
% docker-compose exec app php data/dbcreate.php
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)ができているか確認

$ docker-compose exec db mysql -u root -p.
> 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0