Docker+PhpStorm+Xdebug调试CodeIgniter时MySQL连接失败
Docker环境下PhpStorm PHP-CLI配置指南(针对你的CodeIgniter调试场景)
1. 基础PHP解释器配置
- 打开PhpStorm设置(
File > Settings或Ctrl+Alt+S),进入Languages & Frameworks > PHP - 点击「CLI Interpreter」右侧的「...」,再点「+」选择「From Docker, Vagrant, VM, WSL...」
- 选择你的Docker环境(如Docker Desktop),直接选中已运行的CodeIgniter app容器(不要新建容器)
- 确认「PHP executable」路径正确(比如容器内的
/usr/bin/php),保存解释器
2. 同步容器环境与网络
- 返回解释器配置页,切换到「Environment Variables」标签:
- 添加数据库相关变量:
DB_HOST=mysql(mysql是你的MySQL容器服务名,phpMyAdmin能连说明这个名称正确) - 同步容器内其他环境变量(如
DB_USER、DB_PASSWORD、DB_NAME),直接从容器的环境变量列表复制
- 添加数据库相关变量:
- 切换到「Docker Container Settings」标签,确保「Network」选择和MySQL容器一致的Docker网络(比如docker-compose默认的
xxx_default网络,或你自定义的网络)
3. 运行/调试配置的卷映射检查
- 打开「Run/Debug Configurations」(右上角下拉选「Edit Configurations...」)
- 选中你的CodeIgniter调试配置(比如指向
index.php的PHP脚本) - 在「Configuration」标签确认使用刚才配置的Docker解释器
- 切换到「Docker Container」标签,验证本地项目目录与容器内目录完全映射(比如本地
/Users/xxx/project映射到容器/var/www/html),避免PhpStorm运行的代码和容器命令行环境的代码不一致
4. 修正CodeIgniter数据库配置
- 打开
application/config/database.php,确认$db['default']['hostname']设置为MySQL容器的服务名(如mysql),绝对不能用localhost或127.0.0.1——Docker容器网络中,localhost指当前解释器的容器环境,而非MySQL容器 - 确保
username、password、database参数和容器命令行测试时的配置一致
5. 验证配置有效性
- 创建测试脚本快速验证:
<?php $link = mysqli_connect('mysql', '你的数据库用户名', '你的数据库密码', '你的数据库名'); if (!$link) { die('连接失败: ' . mysqli_connect_error()); } echo '连接成功'; mysqli_close($link);
- 用配置好的Docker解释器运行脚本,若成功连接,再回到CodeIgniter调试即可
常见坑点
- 禁止用
localhost作为数据库主机:容器网络内服务名是跨容器通信的唯一稳定标识 - 必须选择已运行的app容器:新建容器会脱离原有网络,导致无法解析MySQL服务名
- 检查卷映射权限:确保本地目录权限与容器内一致,避免CodeIgniter读取错误的配置文件
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

