Docker 安装 Redis:持久化、密码、内存上限三个必配项

裸机装 Redis 要改一堆系统配置,Docker 版把环境隔离了,但三个必配项(密码、持久化、内存上限)一个都不能少——少了任何一个,出事的方式都不一样。

一、准备配置文件

Redis 容器的习惯做法是把整个 redis.conf 挂进去,先在宿主机生成一份:

mkdir -p /data/redis/{data,conf}
curl -fsSL https://raw.githubusercontent.com/redis/redis/7.4/redis.conf \
  -o /data/redis/conf/redis.conf

拉不下来就手写一份精简版,内容如下,直接用也行:

bind 0.0.0.0
protected-mode yes
port 6379
requirepass 你的强密码
appendonly yes
appendfsync everysec
maxmemory 512mb
maxmemory-policy allkeys-lru
dir /data

五个关键字段:

配置 不配会怎样
requirepass 公网裸奔,几小时内被扫描脚本写进挖矿任务(真实高发)
appendonly yes 只剩 RDB 快照,宕机丢最近几分钟数据
maxmemory 无上限吃到宿主机 OOM,容器被杀
maxmemory-policy 内存满后所有写入报 OOM command not allowed
dir /data 持久化文件写到容器层,删容器就丢

注意 bind 0.0.0.0 必须配合 protected-mode yes + 密码使用;只想本机访问就把 bind 改成 127.0.0.1 并去掉端口映射。

二、启动

docker run -d \
  --name redis7 \
  --restart unless-stopped \
  -p 6379:6379 \
  -v /data/redis/data:/data \
  -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
  -e TZ=Asia/Shanghai \
  redis:7.4 \
  redis-server /etc/redis/redis.conf

最后那段 redis-server /etc/redis/redis.conf 不能省——它是让容器用你的配置启动,不写就是默认配置(无密码、无持久化)。

验证:

docker exec -it redis7 redis-cli -a '你的强密码' ping     # PONG
docker exec -it redis7 redis-cli -a '你的强密码' info persistence | grep aof

三、compose 写法

services:
  redis:
    image: redis:7.4
    container_name: redis7
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/etc/redis/redis.conf
    command: ["redis-server", "/etc/redis/redis.conf"]
    healthcheck:
      test: ["CMD-SHELL", "redis-cli -a 你的强密码 ping | grep PONG"]
      interval: 10s
      timeout: 3s
      retries: 5

四、常见问题

现象 原因 解法
(error) NOAUTH / NOAUTH Authentication required 连上了但没给密码 客户端补密码;程序里检查连接串
改了 redis.conf 不生效 容器没带 redis-server /etc/redis/redis.conf 启动 `docker inspect redis7
重启后数据丢了 只有 RDB 且 save 条件没触发,或 dir 没指向挂载卷 开 AOF,确认 info persistence 里 aof_enabled:1
OOM command not allowed maxmemory 到顶且策略是 noeviction 按业务选 allkeys-lru 或 volatile-lru
宿主机连不上 -p 没映射 / 云安全组 / bind 127.0.0.1 依次查端口映射、安全组、bind 配置

五、一个提醒

-p 6379:6379 加上 requirepass 是「能防住扫描」的最低配置,但密码要够强(16 位以上随机串)。Redis 的性能瓶颈通常根本不在单线程,别担心密码校验的开销——担心的是没有密码的后果。


相关工具:Docker 命令速查 · Linux 命令速查 · HTTP/Ping 检测

还有 65 个免费在线工具

纯前端实现,不用注册,数据不上传服务器。

浏览全部工具