Laravel+Docker环境下Redis报错Connection refused的解决求助
解决Laravel+Docker环境下Redis连接拒绝问题
核心问题分析
容器间通信使用容器内部端口,而非宿主机映射的端口。你当前.env中REDIS_PORT=8002是宿主机映射端口,Redis容器内部实际监听的是默认的6379端口,这是连接失败的主要原因。
具体修复步骤
1. 修正.env配置
将REDIS_PORT改为容器内部端口6379:
REDIS_CLIENT=predis REDIS_HOST=redis REDIS_PASSWORD=sample REDIS_PORT=6379
2. 确保app服务与redis服务建立连接
在docker-compose.yml的app服务中添加links和depends_on(确保redis服务优先启动):
app: build: context: ./ dockerfile: app.docker volumes: - ./:/var/www links: - db - redis # 添加该行,建立与redis服务的链接 depends_on: - db - redis # 添加该行,确保redis服务先启动 environment: - DB_PORT=3306 - DB_HOST=db
3. 验证Redis容器的密码配置
官方redis:alpine镜像的REDIS_PASSWORD环境变量会自动设置requirepass,如果仍存在密码验证问题,可在redis服务的command中显式指定密码:
redis: image: redis:alpine container_name: redis command: redis-server --save 60 1 --loglevel warning --requirepass sample volumes: - ./data/redis:/data ports: - "8002:6379"
4. 重启容器并清除配置缓存
执行以下命令重启容器,同时清除Laravel的配置缓存:
# 重启所有容器 docker-compose down && docker-compose up -d # 进入app容器清除缓存 docker-compose exec app php artisan config:clear docker-compose exec app php artisan cache:clear
5. 额外排查项
- 关闭本地通过brew启动的Redis服务,避免端口干扰:
brew services stop redis - 检查Redis容器运行状态:
确认日志中存在docker-compose logs redisReady to accept connections提示,说明服务正常启动。
内容的提问来源于stack exchange,提问作者daprezjer
相关产品推荐
相关产品推荐

