Laravel配置Redis缓存报错:Name or service not known [tcp://redis:6379]求助
排查Laravel Redis连接报错:Name or service not known [tcp://redis:6379]
这个报错指向很明确:你的Laravel应用没使用你在.env里配置的localhost:6379,反而在尝试连接名为redis的主机。这是个很典型的配置类问题,咱们一步步来排查:
1. 先清掉Laravel的配置缓存
Laravel有个配置缓存机制,如果你之前运行过php artisan config:cache,之后修改.env的内容根本不会生效——因为应用会直接读缓存好的配置文件,不会重新加载.env。
解决步骤:
- 执行命令清除配置缓存:
php artisan config:clear - 顺带清掉路由缓存(虽然和这个问题无关,但有时能解决连带的配置加载问题):
php artisan route:clear - 重启你的本地开发服务器(不管是Valet、Homestead还是内置的
php artisan serve),确保新配置生效。
2. 检查Redis配置文件是否正确引用.env变量
打开config/database.php,找到Redis连接的配置块,确认host字段是从.env读取的,而不是硬写成了redis。
正确的配置应该是这样的:
'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DB', 0), ], // 其他连接配置... ],
如果你的host字段直接写死成了'redis',那不管.env里怎么配,应用都会去连这个主机名,自然会报错。改成上面的写法,让它优先读取.env的REDIS_HOST,默认 fallback到localhost。
3. 确认.env文件的配置项拼写无误
检查你的.env文件,确保Redis相关配置没有拼写错误:
REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD=null REDIS_DB=0
注意是REDIS_HOST,别写成REDIS_HOSTS这类错字;另外不要在等号前后加多余空格(比如REDIS_HOST= localhost会导致读取到带空格的主机名)。
4. 排查Docker环境残留配置(可选)
如果你之前用Docker部署过Laravel,可能配置文件里留了针对Docker的设置(比如把Redis主机设为redis,对应Docker Compose里的服务名)。但你现在是本地直接运行Redis,要确保没有这类残留配置覆盖了本地设置。
如果以上步骤都试过还是不行,可以额外做这些验证:
- 重启本地Redis服务器,确认它确实在
localhost:6379端口监听; - 用
telnet localhost 6379或者redis-cli ping测试本地Redis的连通性,确认服务器正常运行; - 运行
php artisan tinker,执行env('REDIS_HOST'),看看输出是不是localhost,确认.env变量被正确读取。
内容的提问来源于stack exchange,提问作者oajmi
相关产品推荐
相关产品推荐

