Docker Compose 如何配置 Redis 持久化挂载卷的正确写法

文章导读
Docker Compose 配置 Redis 持久化的核心在于通过 volumes 映射主机目录到容器的 /data 路径,并在配置文件中开启 AOF 或 RDB,确保容器重启后数据不丢失。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

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/data

2、编写配置文件
在 /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 或调整用户权限。

Docker Compose 如何配置 Redis 持久化挂载卷的正确写法

怎么验证是否生效

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 并配置数据持久化教程 - 开发者社区 - 阿里云