Docker环境下CodeIgniter连接phpMyAdmin MySQL报错连接拒绝求助
Docker环境下CodeIgniter连接MySQL容器报错(2002/Connection refused)解决方法
核心问题说明
phpMyAdmin只是数据库管理界面,实际提供数据库服务的是MySQL容器,连接拒绝的根源是容器间网络配置错误或数据库地址填写不当。
具体解决步骤
1. 修正数据库地址配置
容器内的localhost/127.0.0.1指向容器自身,宿主机IP(如172.20.0.3)也无法直接用于容器间通信,需改用MySQL容器的容器名/服务名作为hostname:
- 若用
docker-compose部署,直接写docker-compose.yml中MySQL服务的名称(例:mysql) - 若单独启动容器,用容器名称(需确保和CodeIgniter容器在同一网络)
修改database.php配置:
$db['default'] = array( 'dsn' => '', 'hostname' => 'mysql', // 替换为你的MySQL容器名/服务名 'username' => 'root', 'password' => 'testpassword', 'database' => 'sortdb', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => TRUE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
2. 确保容器在同一Docker网络
- 查看容器所属网络:
docker inspect <容器名>,查看Networks字段 - 若不在同一网络,将CodeIgniter容器连接到MySQL容器所在网络:
docker network connect <MySQL容器所在网络名> <CodeIgniter容器名> - 用
docker-compose部署时,同一compose文件内的服务默认在专属网络,无需额外配置
3. 验证容器间网络连通性
进入CodeIgniter容器,测试与MySQL容器的连通:
# 测试ping连通性 docker exec -it <CodeIgniter容器名> ping mysql # 测试MySQL连接 docker exec -it <CodeIgniter容器名> mysql -h mysql -u root -p testpassword
若能成功连接,说明网络无问题,再检查CodeIgniter配置细节。
4. 检查MySQL容器状态
- 查看MySQL容器日志,确认服务正常启动:
日志中需出现docker logs <MySQL容器名>ready for connections提示 - 确认root用户允许远程连接:
进入MySQL容器执行SQL:
确保root用户的SELECT user, host FROM mysql.user;host为%(允许所有主机)或包含CodeIgniter容器的网络段
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

