前言:我们部署的服务部署到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