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
相关推荐
考虑考虑6 小时前
docker compose V2版本新属性
运维·后端·自动化运维
小小的木头人7 小时前
Ubuntu Samba修改端口绕过445封禁挂载
运维·ubuntu
March.s7 小时前
Docker 容器技术完全指南:从生态到架构的深度解析
docker
wdfk_prog9 小时前
ROS教程:01 搭建 ROS1 Noetic Docker 开发环境
运维·缓存·docker·容器·ros
SEO_juper9 小时前
Java 并发编程实战:从线程基础到高并发架构
运维·人工智能·爬虫·chatgpt·seo
szephyr9 小时前
Docker + Compose 实战:把本地项目一键搬到云服务器,附完整配置
运维·docker·容器·部署·云服务器
wdfk_prog10 小时前
ros教程02:创建 catkin Workspace、Package 与第一个 ROS1 C++ Node
运维·缓存·docker·容器·ros
亚川楼宇自控系统数据中心厂家10 小时前
高校 / 医院 / 政务云数据中心 IBMS 系统怎么落地?
运维
陈陈CHENCHEN11 小时前
【Linux】服务器根目录磁盘扩容操作记录
linux·运维·服务器
见闻小天地12 小时前
从晶片工艺到可靠性验证:晶威特TF-3215型RTC晶振全面解析
运维·业界资讯