You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose部署Python+Redis连接失败求助:Name or service not known

问题排查与解决方案

核心问题出在Walrus连接参数的格式错误:你给Database的host参数传了带redis://协议前缀的字符串,但Walrus的host只需要纯主机名(或IP),不需要协议头。当前配置下,程序会把redis://redis当作完整的主机名去解析,这显然不符合DNS规则,导致连接失败。

具体修改步骤

1. 修正环境变量中的REDIS_HOST值

  • 修改docker-compose.yml中consumers服务的环境变量:
    environment:
      - REDIS_HOST=redis
    
  • 修改Dockerfile中的环境变量设置:
    ENV REDIS_HOST=redis
    

2. 保持Python连接代码不变

你的现有代码逻辑没问题,只要环境变量是纯主机名即可:

rdb = Database(host=os.getenv("REDIS_HOST", "localhost"), port=6379)

额外排查点

  • 确认Redis容器正常启动:执行docker-compose logs redis查看日志,确保redis-server成功启动并监听6379端口。
  • 处理服务就绪延迟:depends_on仅保证容器启动顺序,不保证Redis服务完全就绪。可以在Python代码中添加连接重试逻辑,比如:
    import os
    from walrus import Database
    import time
    
    def get_redis_connection():
        while True:
            try:
                rdb = Database(host=os.getenv("REDIS_HOST", "localhost"), port=6379)
                # 测试连接
                rdb.ping()
                return rdb
            except Exception as e:
                print(f"Failed to connect to Redis, retrying in 2s: {e}")
                time.sleep(2)
    
    rdb = get_redis_connection()
    
  • 测试容器间网络连通性:进入consumers容器执行ping redis,如果能ping通说明网络没问题,问题还是出在连接参数上。

内容的提问来源于stack exchange,提问作者Solly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:15:45