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):
示例(config/cable.yml):Redis.current = Redis.new(host: 'redis', port: 6379)production: adapter: redis url: redis://redis:6379/1 - 确保docker-compose.yml里Redis服务的端口配置正确(默认6379无需额外暴露,因为同一Compose网络内服务间可以直接访问端口):
services: redis: image: redis:7-alpine # 不需要ports映射,除非要从宿主机访问
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

