Docker环境下Symfony应用无法连接Redis:报错Cannot assign requested address
解决Docker环境中Symfony无法访问Redis的问题
嘿,这个问题我之前在Docker部署Symfony应用时也踩过坑!报错Cannot assign requested address [tcp://localhost:6379]的核心原因很明确:Docker容器内的localhost和宿主机的localhost不是同一个网络环境,咱们一步步来修复:
1. 检查并修正Docker Compose配置
首先确保你的docker-compose.yaml里Redis服务有明确的服务名,并且Symfony服务依赖它:
# docker-compose.yaml version: '3.8' services: # Symfony应用服务 app: build: . ports: - "8000:80" # 确保Redis先启动(仅控制启动顺序,可选加健康检查) depends_on: - redis # 其他配置(环境变量、卷挂载等)... # Redis服务 redis: image: redis:alpine ports: - "6379:6379" # 可选:添加数据持久化 volumes: - redis_data:/data # 定义持久化卷 volumes: redis_data:
这里的关键是给Redis服务命名为redis——Docker Compose会自动为同一网络内的容器创建DNS解析,Symfony容器可以直接通过这个服务名访问Redis。
2. 修正Symfony的Redis连接参数
打开app/config/parameters.yml,把Redis的主机地址从localhost改成Docker Compose里的Redis服务名redis:
# app/config/parameters.yml parameters: # 其他现有参数... redis_host: redis redis_port: 6379
如果你在Symfony里是直接写死连接字符串的,也要改成tcp://redis:6379而不是tcp://localhost:6379。
3. 验证连接是否正常
修改完配置后,重启容器:
docker-compose down && docker-compose up -d
然后可以进入Symfony容器测试连通性:
# 进入Symfony容器(替换成你的服务名,比如app) docker-compose exec app sh # 安装ping工具(如果容器没有的话) apt-get update && apt-get install -y iputils-ping # 测试Redis服务的DNS解析和连通性 ping redis
如果能ping通,再用redis-cli测试Redis连接:
# 安装redis-cli(如果容器没有的话) apt-get install -y redis-tools # 连接Redis服务 redis-cli -h redis -p 6379
输入PING如果返回PONG,就说明连接正常了!
补充说明
- Docker容器内的
localhost指向容器自身,而不是宿主机,所以Symfony容器访问localhost:6379其实是在找自己容器的6379端口,自然找不到Redis。 - 如果你的Symfony应用用的是Redis客户端(比如Predis),确保配置里的主机参数已经正确引用了
redis_host这个参数。
内容的提问来源于stack exchange,提问作者lieroes
相关产品推荐
相关产品推荐

