Docker环境Redis没挂载保存数据

前言:我们部署的服务部署到compose中了,不知道那个傻波一人员提供的compose中关于redis没提供挂载数据盘,于是就引发了一下事情。

1、确认compose文件内容

bash 复制代码
cat docker-compose.yml

services:
  redis:
    image: docker.io/library/redis:8.6.2
    container_name: redis
    restart: always
    environment:
      - REDIS_PASSWORD=123456
    network_mode: host
    command: redis-server --requirepass 123456

Redis只是简单的配置密码

2、确认Redis数据

bash 复制代码
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
# ls

Redis对应数据没存在/data目录中,说明缓存的数据还是在内存中

3、保存内存数据

bash 复制代码
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
root@localhost:~/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
root@localhost:~/local# # 创建目标文件夹
root@localhost:~/local# mkdir -p ./services/redis/data
root@localhost:~/local# 
root@localhost:~/local# # 将容器内的 dump.rdb 复制到宿主机挂载目录(注意最后的斜杠和点)
root@localhost:~/local# docker cp redis:/data/dump.rdb ./services/redis/data/
Successfully copied 60.9kB to /usr/local/services/redis/data/
root@localhost:~/local# chown -R 999:999 ./services/redis/data

4、Redis改为持久化5、

一定要用--appendonly no 不能使用yes ,如果使用yes后,Redis 会优先走 AOF 恢复路径,导致 RDB 没有按预期加载

bash 复制代码
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:/data

5、重新拉起Redis

bash 复制代码
docker stop redis
docker-compose up -d --force-recreate redis

检查实际启动参数,必须看到 appendonly no:

复制代码
docker inspect redis --format '{{json .Config.Cmd}}'

分别检查数据库key是否还存在:

6、确认恢复后重新启用 AOF

只有在 INFO keyspace 已经确认数据正确后再执行:

复制代码
docker exec -e REDISCLI_AUTH redis redis-cli CONFIG SET appendonly yes

确认 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
相关推荐
XiaoMaqqqq12 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
huainingning12 小时前
RJ SW Console口忘记密码处理方法
linux·运维·服务器
布裘12 小时前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器
慧都小项12 小时前
程序到了Linux才出错?用CLion把调试接到目标环境
linux·运维·服务器
Lsetea13 小时前
OpenSSL verify报unhandled critical extension:error 34与关键扩展排查
运维·https·ssl证书·openssl·证书链
guo_wen_qiang13 小时前
docker的备份与迁移
运维·docker·容器
Ruiery14 小时前
Linux 6.6内核内存管理深度解析(一):物理内存初始化 — memblock 怎么把内存交给 buddy
linux·运维·服务器
Android系统攻城狮15 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_max调用流程与实战(五十九)
linux·运维·服务器·gstreamer音视频·音视频进阶·gstreamer音视频进阶
忆挽篱笙歌16 小时前
makefil
linux·运维·服务器
小小龙学IT16 小时前
Kubernetes 深度实践:架构、API 与避坑指南
容器·架构·kubernetes