SQLSTATE[HY000] [2002] Connection refused报错 PHP连接docker容器中的mysql
Laradock 是基于 Docker 提供的完整 PHP 本地开发环境
在框架中连接 MySQL 时 报错
SQLSTATE[HY000] [2002] Connection refused
主要还是是对 Docker 容器的隔离机制理解不够,每个容器之间都是隔离的,如果有相互依赖的服务,则需要进行显示的关联,比如使用选项
--link
。
同理,使用docker-compose
时候,容器之间进行关联是采用类似如下的方式:
# docker-compose.xml 缩减版
version: '2'
services:
...
php:
build: ./php
...
links:
- "mysql"
mysql:
build: ./mysql
ports:
- "3306:3306"
environment:
MYSQL_PASSWORD: root
注意,关键地方来了:测试连接 MySQL 的代码其实是运行在 PHP 对应的容器里,而 MySQL 服务是在它自己对应的容器里,当我们的 host 填写 127.0.0.1 时候,其实对应的是 PHP 容器里面,所以不可能找到对应的服务,从而引起上面拒绝连接的错误。
那么,怎么进行连接呢?
其实容器之间关联之后,可以通过容器名进行连接。
在上面的 docker-compose.xml
文件中,MySQL 服务对应的容器名是 mysql
,PHP 容器与它关联的名字也是 mysql
,所以把 127.0.0.1
改成 mysql
再进行连接即可。
# thinkphp项目 修改database.php文件
'hostname' => 'mysql',
# Laravel 项目修改 .env 文件
DB_HOST=mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2019-08-29 用html5自带表单验证 并且用ajax提交的解决方法(附例子)
2019-08-29 HTML5使用JavaScript控制<audio>音频的播放
2019-08-29 Windows连接Linux虚拟机里面的Docker容器
2019-08-29 service XXX does not support chkconfig
2019-08-29 Linux 添加Nginx 到 service 启动