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

Docker容器重启后Redis数据无法持久化的问题求助

解决方案

1. 修正Redis服务的Docker Compose配置

自定义command时会覆盖Redis容器的默认启动参数,其中就包括允许外部访问的绑定配置。必须显式添加--bind 0.0.0.0确保跨容器可访问,同时保证卷挂载到Redis默认数据目录/data。示例配置如下:

services:
  redis:
    image: redis:latest
    command: ["redis-server", "--appendonly", "yes", "--bind", "0.0.0.0"]
    volumes:
      - redis-data:/data
    ports:
      - "6379:6379"
volumes:
  redis-data:

2. 清理残留的损坏数据

如果之前启动时生成了损坏的AOF文件,会导致Redis启动后异常:

  • 停止容器并删除旧卷(注意:此操作会清空现有Redis数据):
    docker-compose down -v
    
  • 重新构建启动容器:
    docker-compose up -d
    

3. 排查权限问题

Redis默认以redis用户(UID 999)运行,若挂载卷的权限不足会导致AOF文件写入失败,进而引发连接重置:

  • 临时测试:在Redis服务配置中添加user: root强制以root用户运行,验证是否能正常连接:
    services:
      redis:
        # 其他配置不变
        user: root
    
    若此配置生效,生产环境建议调整卷目录权限为UID 999可读写,而非长期使用root用户。

4. 验证连接与持久化

容器启动后,执行以下步骤确认功能正常:

  1. 进入Redis容器测试连接:
    docker exec -it $(docker-compose ps -q redis) redis-cli
    
  2. 执行PING,应返回PONG;设置测试键:SET test_key "persist_test"
  3. 停止并重启容器:docker-compose down && docker-compose up -d
  4. 再次进入容器执行GET test_key,应返回"persist_test",确认持久化生效。

5. 检查Flask应用的Redis连接配置

确保Flask中Redis连接的host使用Docker Compose的服务名redis,而非localhost(容器间通信依赖服务名):

import redis

redis_client = redis.Redis(host='redis', port=6379, db=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:18:18