Redis重启后只加载RDB未加载AOF的直接原因是:AOF文件在配置路径下不存在或不可读;即使appendonly yes启用,只要appendonly.aof缺失、为空、权限不足或被重命名,Redis就退回到RDB加载逻辑。

redis.conf里必须设appendonly yes,否则挂载了也白挂
很多人把appendonly.aof文件挂载到宿主机后发现容器重启,AOF还是没生成——根本原因是Redis默认关闭AOF,只靠RDB快照。光挂载目录不改配置,Redis压根不会写AOF文件。
检查你的redis.conf,确保有这两行:
appendonly yes appendfilename "appendonly.aof"
注意:appendfilename值不用改路径,Redis会自动写进dir指定的目录(也就是你挂载的数据目录)。
-
appendonly必须为yes,大小写敏感,on或true都不认 - 如果同时开了RDB(
save指令),AOF和RDB会共存,但Redis启动时优先用AOF恢复 - 生产环境建议关掉RDB(注释所有
save行),避免fork阻塞+双写开销
挂载路径要对齐dir配置,不能只挂AOF文件本身
Redis写AOF不是“单独写一个文件”,而是先写临时文件appendonly.aof.tmp,重命名后再刷盘。它还可能生成appendonly.aof.1.base.rdb(混合持久化启用时)。所以你不能只挂载appendonly.aof这个文件,必须挂载整个数据目录。
在redis.conf中确认dir指向的位置,例如:
dir /data
然后用docker run挂载该目录:
docker run -v /home/redis/data:/data redis:7.0
- 宿主机
/home/redis/data下会出现appendonly.aof、appendonly.aof.tmp等文件 - 绝对不要用
-v /home/redis/data/appendonly.aof:/data/appendonly.aof——这会导致Redis无法创建临时文件,启动失败或AOF写入中断 - 挂载目录需保证可写,常见权限问题:宿主机目录属主是root,而Redis容器默认以redis用户(UID 999)运行
容器退出后AOF文件还在,但下次启动可能报错
挂载成功后,即使docker rm -f redis,AOF文件仍保留在宿主机上。但下次docker run启动时,Redis会尝试加载这个AOF文件——如果文件损坏、格式错乱或被手动编辑过,就会拒绝启动,并输出类似错误:
Bad file format reading the append only file
这时别急着删文件,先用redis-check-aof工具修复:
docker run --rm -v /home/redis/data:/data redis:7.0 redis-check-aof --fix /data/appendonly.aof
- 修复命令必须用同版本Redis镜像,不同大版本的AOF格式不兼容
- 修复前建议先备份原文件:
cp appendonly.aof appendonly.aof.bak - 如果AOF过大(比如几百MB),修复过程可能卡住,可考虑用
--truncate截断末尾无效内容
docker-compose里挂载AOF要显式声明restart策略
单纯挂载目录还不够。如果容器因OOM或崩溃退出,docker-compose up默认不会自动重启,AOF就停更了。必须加restart策略,让Redis持续追写:
services:
redis:
image: redis:7.0
volumes:
- ./redis-data:/data
command: redis-server /usr/local/etc/redis/redis.conf
restart: unless-stopped-
restart: unless-stopped比always更稳妥,避免人为docker stop后又自动拉起 - 务必通过
command指定配置文件路径,否则挂载的redis.conf可能不生效 - AOF重写(
bgrewriteaof)触发时会产生I/O高峰,若宿主机磁盘慢,可能拖慢Redis响应;建议监控redis_aof_last_rewrite_time_sec指标
AOF挂载真正麻烦的不是命令怎么写,而是得同时管住三件事:配置开关、目录权限、重启行为。漏掉任何一环,数据就可能在你以为“已持久化”的时候悄悄消失。


















