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
相关推荐
你住过的屋檐1 小时前
【Nginx】linux上安装nginx
linux·运维·nginx
AKCJDJ3 小时前
k8s的管理及控制器管理
云原生·容器·kubernetes
灰阳阳3 小时前
Docker-数据卷命令解析
java·docker·eureka
晓晓_za8986683 小时前
开源 GEO 优化源码二次开发:贴牌改造与业务模块扩展实践
java·运维·服务器·开发语言·性能优化·开源
SCandL1523 小时前
k8s service
linux·容器·kubernetes
云计算DevOps-韩老师3 小时前
【MySQL运维DBA】【SQL基础系列002篇】
运维·mysql·dba
DBA大董4 小时前
TDengine3.0 DBA常用的运维命令和SQL2
运维·数据库·时序数据库·dba·tdengine
会飞的土拨鼠呀4 小时前
Linux的存储使用率应该如何计算
linux·运维·服务器
zhangfeng11334 小时前
AMD Instinct MI50(gfx906)上为 Qwen 系列模型优化并可用的 vLLM 相关仓库、Docker 镜像与实践指南。
人工智能·docker·ai编程·qwen·算子开发·vllm·mi50