我运行以下语句(因此它是完全可重现的)(因为我想使用 WordPress 的源代码)并且以下内容使您的当前目录成为在 8082(pwd)下运行的网站。
mkdir wordpress
cd wordpress
git clone https://github.com/WordPress/WordPress.git .
docker run -p 127.0.0.1:3306:3306 –name some-mariadb -e MARIADB_ROOT_PASSWORD=PASSWORD -d mariadb:latest
docker run -d -p 8082:80 –mount type=bind,source=”$(pwd)”,target=/var/www/html php:apache
- 在 /usr/local/etc/php/php.ini 中 extension=mysqli 被取消注释(并且其他的也被取消注释)(所以我编辑了这个文件)
- 我可以连接到 MariaDb 并创建数据库等
我创建了一个新文件:info.php:
if ( function_exists( 'mysqli_connect' ) )
{
echo "exists";
}
else
{
echo "does not exist";
}
phpinfo();
问题:浏览器中的输出显示“不存在”。
(phpinfo()phpinfo 显示库 mysqlnd 8.0.11)
这意味着 WordPress 会出现同样的错误,因为这是 WordPress 使用的代码。
那么为什么... phpinfo 提供了详细信息但找不到该函数/扩展。
我做错了一些事,这很可能是。
参考:
- https://hub.docker.com/_/mariadb官方图片
- https://hub.docker.com/_/php官方图片
- https://github.com/WordPress/WordPress.git官方镜像仓库
更新 我注意到上面的 phpinfo 屏幕中没有“--with-mysqli=mysqlnd”。所以我解压了 tar 文件(当然是在 docker 镜像中),然后
- 运行 phpinfo 提供的相同配置命令,并附加“--with-mysqli=mysqlnd”(但必须在各种 apt-get xxx-dev 库之间安装,包括 apache dev 库、libxml-dev、sqlite3-dev、libssl-dev、zlib1g-dev、libcurl4-openssl-dev、libonig-dev、libreadline-dev、libsodium-dev、libargon2-dev)
- 运行制作
- 运行 make install
- 重新开始
这解决了这个问题。
答案1
在这个 docker 镜像 php 编译中缺少一个包。
- 进入图片并解压 php tar
- 复制 phpinfo 的配置并附加 '--with-mysqli=mysqlnd'
- 安装缺失的软件包(各种)xxx-dev 库,包括 apache dev 库、libxml-dev、sqlite3-dev、libssl-dev、zlib1g-dev、libcurl4-openssl-dev、libonig-dev、libreadline-dev、libsodium-dev、libargon2-dev(使用 apt-get install xxx)
- 运行 make
- 运行安装
- 重新开始
这个问题将会得到解决。
或者...在 docker hub 上搜索具有此内容的图像。