Docker Compose 配置 Redis 持久化的核心在于通过 volumes 映射主机目录到容器的 /data 路径,并在配置文件中开启 AOF 或 RDB,确保容器重启后数据不丢失。
先说结论:生产环境建议同时挂载配置文件与数据目录,并启用 AOF 持久化策略。
- 适合:需要数据持久化保存的生产或测试环境,避免容器删除导致数据清零。
- 先准备:在宿主机创建配置与数据目录,编写正确的 redis.conf 文件。
- 验收:写入测试数据后重启容器,确认数据仍存在且主机目录生成持久化文件。
命令速用版
以下是一个标准的 docker-compose.yml 配置示例,可直接参考修改路径后使用:
version: '3'
services:
redis:
image: redis:7.0
container_name: redis-persistent
restart: always
ports:
- "6379:6379"
volumes:
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data
command: redis-server /usr/local/etc/redis/redis.conf配套的 redis.conf 关键配置片段:
bind 0.0.0.0
protected-mode yes
requirepass yourpassword
appendonly yes
appendfsync everysec
dir /data为什么会这样
Docker 容器本质是 ephemeral(短暂)的,容器内部文件系统随容器销毁而清除。默认情况下,Redis 将数据保存在容器内的 /data 目录,若不挂载卷,重启容器后数据即丢失。通过 volumes 将宿主机的目录映射到容器的 /data 目录,实际上是将数据写在了宿主机磁盘上,从而实现持久化。同时,挂载配置文件是为了确保每次启动都加载相同的持久化策略(如 AOF 开关),避免默认配置导致数据不安全。
分步处理
1、创建宿主机目录
在计划部署的路径下创建配置和数据文件夹,例如:
mkdir -p /data/redis/conf
mkdir -p /data/redis/data2、编写配置文件
在 /data/redis/conf/ 下创建 redis.conf,必须包含持久化相关指令。注意容器内运行 Redis 时,配置文件中 daemonize 应设为 no,否则容器会启动后立即退出。
3、编写 Docker Compose 文件
创建 docker-compose.yml,确保 volumes 部分正确映射了配置文件到 /usr/local/etc/redis/redis.conf,数据目录到 /data。command 指令需指定使用配置文件启动。
4、启动服务
执行 docker-compose up -d 启动容器。若遇到权限问题,可能需要对宿主机目录执行 chmod 777 或调整用户权限。
怎么验证是否生效
1、写入测试数据
使用 redis-cli 连接容器,执行 SET test_key "hello"。
2、检查主机文件
查看宿主机 /data/redis/data 目录下是否生成了 appendonly.aof 或 dump.rdb 文件。若开启 AOF,应看到 aof 文件持续更新。
3、重启验证
执行 docker-compose restart 或 docker restart redis-persistent,再次连接 Redis 执行 GET test_key,若返回 "hello" 则持久化生效。
常见坑
1、配置文件路径错误
Redis 镜像默认配置路径可能不同,官方镜像通常建议使用 /usr/local/etc/redis/redis.conf,挂载时需对应,否则容器启动会报错或忽略配置。
2、权限问题
宿主机目录若权限不足,Redis 进程无法写入数据文件,导致启动失败或持久化无效。常见于 Linux 系统下非 root 用户运行 Docker。
3、Daemonize 设置
在 Docker 容器中运行 Redis,redis.conf 中必须设置 daemonize no。若设为 yes,主进程会退出,导致容器不断重启。
4、持久化模式混淆
同时开启 RDB 和 AOF 时,Redis 重启会优先加载 AOF 文件。若只配置了 RDB 却检查 AOF 文件,会误以为持久化未生效。
参考来源
- VirtualBox 下 CentOS-10 下 Docker 安装 Redis (包括 使用 Docker Compose 部署)
- 不止是安装:用 Docker 和 Docker Compose 一键部署 Redis,并挂载数据卷
- Docker 安装 Redis 并实现持久化
- 安装 docker 版 redis 并挂载配置文件 redis.conf
- Docker 部署 Redis 并配置数据持久化教程 - 开发者社区 - 阿里云