行业资讯
📅 2026/8/29 5:39:54
Docker环境Redis没挂载保存数据
前言我们部署的服务部署到compose中了不知道那个傻波一人员提供的compose中关于redis没提供挂载数据盘于是就引发了一下事情。1、确认compose文件内容cat docker-compose.yml services: redis: image: docker.io/library/redis:8.6.2 container_name: redis restart: always environment: - REDIS_PASSWORD123456 network_mode: host command: redis-server --requirepass 123456Redis只是简单的配置密码2、确认Redis数据docker exec redis ls -la /data total 8 drwxr-xr-x 2 redis redis 4096 Apr 22 01:38 . drwxr-xr-x 1 root root 4096 Aug 25 09:27 .. docker exec -it redis /bin/sh # ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # cd /data # lsRedis对应数据没存在/data目录中说明缓存的数据还是在内存中3、保存内存数据docker exec redis redis-cli -a 123456 SAVE Warning: Using a password with -a or -u option on the command line interface may not be safe. OK rootlocalhost:~/local# docker exec redis ls -la /data total 68 drwxr-xr-x 1 redis redis 4096 Aug 25 10:05 . drwxr-xr-x 1 root root 4096 Aug 25 09:27 .. -rw------- 1 redis redis 59009 Aug 25 10:05 dump.rdb rootlocalhost:~/local# # 创建目标文件夹 rootlocalhost:~/local# mkdir -p ./services/redis/data rootlocalhost:~/local# rootlocalhost:~/local# # 将容器内的 dump.rdb 复制到宿主机挂载目录注意最后的斜杠和点 rootlocalhost:~/local# docker cp redis:/data/dump.rdb ./services/redis/data/ Successfully copied 60.9kB to /usr/local/services/redis/data/ rootlocalhost:~/local# chown -R 999:999 ./services/redis/data4、Redis改为持久化5、一定要用--appendonly no 不能使用yes 如果使用yes后Redis 会优先走 AOF 恢复路径导致 RDB 没有按预期加载cat docker-compose.yml services: redis: image: docker.io/library/redis:8.6.2 container_name: redis restart: always network_mode: host command: redis-server --requirepass 123456 --appendonly no volumes: - ./services/redis/data:/data5、重新拉起Redisdocker stop redis docker-compose up -d --force-recreate redis检查实际启动参数必须看到appendonly nodocker inspect redis --format {{json .Config.Cmd}}分别检查数据库key是否还存在6、确认恢复后重新启用 AOF只有在INFO keyspace已经确认数据正确后再执行docker exec redis redis-cli -a $password CONFIG SET appendonly yesWarning: Using a password with -a or -u option on the command line interface may not be safe. OK确认 AOF 文件已经产生find ./services/redis/data -maxdepth 3 -type f -ls经常看到以下内容appendonlydir/appendonly.aof.manifest appendonlydir/*.base.rdb appendonlydir/*.incr.aof这时再把 Compose 改回command: redis-server --requirepass 原密码 --appendonly yes