Docker多容器部署Yii2无法连接Redis:Connection refused 111问题
问题解决:Yii2容器无法连接Docker中的Redis容器
问题根源
- Yii2配置中Redis主机设为
127.0.0.1,在PHP容器内该地址指向容器自身,而非Redis容器。 - Redis配置文件中
bind 127.0.0.1限制Redis仅监听容器本地端口,外部容器无法访问。
修复步骤
1. 修改Yii2的Redis连接配置
编辑/frontend/config/main.php,将Redis的hostname替换为Docker Compose中Redis服务的名称redis:
return [ 'components' => [ 'cache' => [ 'class' => 'yii\redis\Cache', 'redis' => [ 'hostname' => 'redis', // 替换原127.0.0.1 'port' => 6379, 'database' => 1, ], ], // 其他组件配置... ], ];
2. 修改Redis配置,允许外部容器访问
编辑/docker/redis_data/conf/redis.conf,将bind 127.0.0.1改为bind 0.0.0.0,让Redis监听所有网卡:
bind 0.0.0.0 protected-mode no port 6379 # 其他配置保持不变...
3. 重启相关容器
执行命令重新构建并启动Redis和PHP-FPM容器:
docker-compose down redis php-fpm docker-compose up -d --build redis php-fpm
补充说明
- Docker Compose会自动为同一网络下的服务创建DNS解析,服务名称(如
redis、php-fpm)可直接作为主机名访问。 - 本地
redis-cli能访问是因为端口映射到了宿主机,但容器间通信依赖内部网络,无需通过宿主机端口。
内容的提问来源于stack exchange,提问作者user10436544
相关产品推荐
相关产品推荐

