Docker部署Web与数据库容器无法连接问题排查求助
问题排查与解决方案
核心问题:数据库连接被拒绝(SQLSTATE[HY000] [2002])
你的MRBS数据库配置犯了Docker容器间通信的典型错误:
- 主机地址错误:Web容器里的
127.0.0.1指向容器自身,而非数据库容器。在Docker Compose的自定义网络mrbsNet中,容器间需要通过服务名(即mrbs_db)来互相访问,Compose会自动维护DNS解析。 - 端口错误:
33060是宿主机的映射端口,容器内部连接数据库时,应该使用数据库容器的内部端口3306,而非宿主机的映射端口。
修改MRBS的数据库配置为:
$dbsys = "mysqli"; $db_host = "mrbs_db"; // 替换为数据库服务名 $db_port = 3306; // 使用容器内部端口 $db_database = "mrbs"; $db_login = "user"; $db_password = 'user';
其他报错处理
1. Locale设置失败(Notice: Server failed to set locale...)
Web容器缺少对应的UTF-8 locale包,需要在Web服务的Dockerfile中添加以下命令(基于Debian/Ubuntu镜像):
RUN apt-get update && apt-get install -y locales && \ locale-gen en.UTF-8 en_GB.UTF-8 && \ update-locale LANG=en.UTF-8 ENV LANG=en.UTF-8 ENV LC_ALL=en.UTF-8
2. Headers already sent警告
这个错误是因为PHP在调用ini_set()或session_start()之前已经输出了内容(比如配置文件开头的空白字符、换行)。检查MRBS的配置文件或入口文件,确保:
<?php标签前没有任何空白字符、换行或HTML输出- 所有session初始化、ini配置修改的代码在任何输出操作之前执行
验证步骤
- 修改配置后重启容器:
docker-compose down && docker-compose up -d --build - 进入Web容器测试数据库连通性:
docker exec -it mrbs bash # 执行后在容器内运行以下命令,输入密码user测试 mysql -h mrbs_db -u user -p mrbs
内容的提问来源于stack exchange,提问作者matteo camillo
相关产品推荐
相关产品推荐

