connection refused说明队列驱动连接被目标服务拒绝,首要排查redis等服务是否运行并监听对应端口、配置中host/port/password是否准确匹配、网络及防火墙是否放行,docker环境需用容器名而非127.0.0.1。

ThinkPHP6.0 使用队列服务报 Connection refused,说明队列驱动(如 Redis、Database、AMQP)的连接请求被目标服务主动拒绝,不是 ThinkPHP 本身的问题,而是底层服务未就绪或网络/配置不匹配。重点排查连接目标是否真实可达、监听地址是否正确、权限与防火墙是否放行。
确认队列服务是否运行并监听对应端口
Connection refused 的首要原因是服务根本没启动,或未在预期地址和端口监听。
- 如果是 Redis 驱动:执行
redis-cli -h 127.0.0.1 -p 6379 ping,返回PONG才算通;若报错,先检查systemctl status redis(Linux)或 Windows 服务中 Redis 是否运行 - 如果是 Database 驱动:确保 MySQL 已启动,且能用
mysql -h 127.0.0.1 -P 3306 -u root -p登录成功;注意不要用localhost测试,它可能走 Unix socket,而 PHP 队列默认走 TCP - 用
netstat -tulnp | grep :6379(Redis)或netstat -tulnp | grep :3306(MySQL)确认进程是否绑定到0.0.0.0:端口或127.0.0.1:端口;仅监听127.0.0.1时,Docker 容器内或远程调用会失败
检查 ThinkPHP 队列配置是否与服务实际一致
配置写错是高频原因,尤其 host、port、password、database 等字段必须完全匹配服务端设置。
- Redis 配置需在
config/queue.php中明确:'host' => '127.0.0.1'(非 localhost)、'port' => 6379(整数)、'password' => 'your_pass'(空密码也要写'')、'select' => 0 - Docker 环境下,host 不能写
127.0.0.1或localhost,应改为容器名(如redis)或宿主机网关(如host.docker.internal) - Database 驱动依赖
jobs表,需先执行php think queue:table生成表结构,并确认config/database.php中默认连接可正常工作 - 检查
default驱动是否设为你要用的那个,比如'default' => 'redis';否则会退化到sync模式,看似不报错实则没走队列
验证网络连通性与防火墙策略
即使服务运行,中间网络环节也可能拦截连接请求。
- 在运行 ThinkPHP 的机器上执行:
telnet 127.0.0.1 6379(Redis)或nc -zv 127.0.0.1 3306(MySQL),看是否提示Connected;若仍报 Connection refused,说明服务未监听或端口不对 - Linux 系统需检查防火墙:
sudo ufw allow 6379(Ubuntu)或sudo firewall-cmd --add-port=6379/tcp --permanent && sudo firewall-cmd --reload(CentOS) - 云服务器(如阿里云、腾讯云)务必检查安全组规则,3306 / 6379 端口需开放入方向(Inbound)TCP 协议
- Docker Compose 场景下,确认
networks配置使应用容器与 Redis/MySQL 容器处于同一网络,且depends_on不代表服务已就绪,建议加健康检查或启动延迟
排除认证与权限问题
部分环境(尤其是 MySQL 8.0+ 或远程 Redis)因用户权限或认证插件限制,也会表现为 Connection refused。
- MySQL 作为队列后端时,确认数据库用户允许从当前 host 连接:登录 MySQL 执行
SELECT user, host FROM mysql.user WHERE user = 'your_user';,若 host 是localhost,远程或 Docker 内无法连接,需执行UPDATE mysql.user SET host='%' WHERE user='your_user'; FLUSH PRIVILEGES; - Redis 若启用了 requirepass,但配置中 password 为空或错误,连接会被拒绝;若 Redis 绑定到
127.0.0.1且未设密码,外部访问仍会失败 - MySQL 8.0 默认使用
caching_sha2_password插件,PHP 7.4 以下版本不兼容,可临时改用mysql_native_password:执行ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass'; FLUSH PRIVILEGES;
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











