1Panel建站笔记
最近将服务器从宝塔迁移到1Panel管理,实现容器化无侵入服务器管理,便于后续数据迁移和持续维护。
在这个过程中遇到了一系列问题,在这个笔记中跟进问题踩坑日志。
docker php容器中部署的Typecho框架博客网站连接mysql容器失败的问题
问题根因
在docker容器中缺少连接mysql的必要扩展,在Typecho源码使用的Mysql驱动连接数据库,但是1Panel未提供该扩展,故安装并启用1Panel提供的Pdo_Mysql扩展作为驱动连接MySQL。
解决方法
- 如图,创建php容器时添加mysqli和pdo_mysql扩展
- 如图,在博客网站根目录下修改config.inc.php文件,将驱动换成pdo_mysql
关键排查路径
- config.inc.php中根据容器B名称连接数据库,访问网站显示数据库连接失败
- 进入php容器(容器A)终端,能ping通mysql容器(容器B)的ip和容器名(会被映射成ip)
- 在外网能mysql连接容器B
- 切换php 6,7,8版本尝试,问题未解决
- 在创建php容器时添加mysqli扩展,并进入php容器,使用以下指令调试MySQL连通性,发现可以正常联通:
php -r "
\$conn = mysqli_connect('容器b名称', 'root', 'MySQL密码', 'mysql', 3306);
if (!\$conn) echo 'Error: ' . mysqli_connect_error();
else echo 'OK';
"- 于是我把问题定位到网站MySQL连接串代码上,在config.inc.php文件的
<?php下面一行添加下列代码打印报错信息
define('__TYPECHO_DEBUG__', true);
error_reporting(E_ALL);
ini_set('display_errors', 1);在Typecho_Db::set($db);上一行添加下列代码显示连接串信息
var_dump($db);
exit;- 根据报错信息发现根因,容器缺少mysql连接驱动扩展,于是我根据解决方案中的方法安装并应用Pdo_Mysql扩展后问题解决。

