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

Docker Compose部署Rails应用:Redis错误与配置问题咨询

问题解决方案

1. Redis容器Can't handle RDB format version 11错误修复

这个错误是Redis版本不兼容导致的:RDB格式版本11对应Redis 7.0及以上版本,如果你当前用的Redis容器是6.x或更低版本,就无法识别新版本的RDB文件。解决方式二选一:

  • 升级Redis容器版本:在docker-compose.yml里把Redis镜像指定为7.0+版本,比如:
    services:
      redis:
        image: redis:7-alpine
        # 其他配置...
    
  • 清理旧RDB数据:如果Redis里的数据不重要,直接删除挂载的Redis数据卷。执行命令:
    docker-compose down -v
    docker-compose up -d
    
    (-v参数会删除所有关联的匿名卷,包括Redis的数据卷)

2. AWS Secrets Manager环境变量的疑问解答

不需要重新定义数据库环境变量,但要保证Docker Compose启动的容器能正常访问AWS Secrets Manager:

  • 如果你的Dockerfile里已经有运行时拉取Secrets的逻辑(比如用AWS CLI或SDK获取),只要给容器配置好AWS权限即可:
    • 本地开发:通过environment在docker-compose.yml里传入AWS凭证:
      services:
        rails:
          environment:
            - AWS_ACCESS_KEY_ID=your_access_key
            - AWS_SECRET_ACCESS_KEY=your_secret_key
            - AWS_REGION=your_region
      
    • 生产环境(比如ECS/EKS):给容器绑定具备Secrets Manager访问权限的IAM角色,无需手动传凭证。
  • 如果是构建镜像时拉取Secrets,Docker Compose构建镜像时会自动执行Dockerfile里的步骤,无需额外配置。

3. Rails容器连接Redis报错的修复

报错Cannot assign requested address - connect(2) for [::1]:6379是因为Rails试图连接本地(容器自身的localhost)的Redis,但Docker Compose里每个容器都是独立的网络节点,localhost不指向Redis容器。正确配置方式:

  • 找到Rails里的Redis配置文件(比如config/initializers/redis.rb、config/cable.yml或config/session_store.rb),把Redis的host改成Docker Compose里Redis服务的名称(默认是redis,看你docker-compose.yml里的服务名):
    示例(config/initializers/redis.rb):
    Redis.current = Redis.new(host: 'redis', port: 6379)
    
    示例(config/cable.yml):
    production:
      adapter: redis
      url: redis://redis:6379/1
    
  • 确保docker-compose.yml里Redis服务的端口配置正确(默认6379无需额外暴露,因为同一Compose网络内服务间可以直接访问端口):
    services:
      redis:
        image: redis:7-alpine
        # 不需要ports映射,除非要从宿主机访问
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:25:00