【Docker】Docker配置Redis单机模式

准备配置文件

根据自身需要准备配置文件,以下仅作参考,更多配置请查看官网
Redis 配置概述https://redis.io/docs/latest/operate/oss_and_stack/management/config/

复制代码
# redis.conf
# Redis 实例监听端口,默认 6379
# 如果设置为 0,Redis 将不会监听 TCP 套接字
port 6379

# 数据库数量,默认 16
# 数据库索引从 0 开始,0-15
databases 16

# 客户端空闲超时时间(秒)
# 0 表示永不超时,一直保持连接
timeout 300

# TCP 保活探测间隔(秒)
# 检测死连接,防止僵尸连接占用资源
# 建议 60-300 秒
tcp-keepalive 60

# TCP 监听队列长度(半连接队列)
# 高并发场景建议增大
tcp-backlog 511

# 最大同时连接客户端数
# 默认 10000,根据 ulimit -n 和系统资源调整
# 设置为 0 表示无限制(受系统限制)
maxclients 10000

# 日志级别:debug、verbose、notice、warning
# 生产环境建议使用 notice
loglevel notice
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile /var/log/redis/redis-server.log

# #######安全相关

# 监听的地址,默认是127.0.0.1 ,只能本地访问,修改为0.0.0.0则可以任意IP访问
# 可以绑定一个或多个 IP 地址,该IP地址为本机网卡的IP,并非外部主机的IP
# bind 127.0.0.1
# 开发学习环境下可设置为0.0.0.0,生产环境下不要这么配置,根据实际情况修改
bind 0.0.0.0
# 开启时,如果没有显式地绑定到特定的IP地址(即使用bind 0.0.0.0等),并且没有设置密码,那么它将只接受来自本地回环地址(127.0.0.1和::1)的连接,拒绝来自其他网络地址的连接请求,从而防止未经授权的外部访问
protected-mode yes

# 是否以守护进程方式运行,默认 no
# 生产环境建议设置为 yes
# 如果使用docker部署,应当改为no
daemonize no

# 设置连接密码,注释掉则没有
# 警告:因为 Redis 速度非常快,外部用户每秒可以尝试 150k 个密码,所以密码要足够复杂
requirepass 123456

# #######RDB持久化相关配置
# 在 N 秒内数据集至少有 M 个改动时,自动保存一次
# 格式:save <seconds> <changes>
# 可以设置多个 save 条件,满足任一条件都会触发保存
# 设置为 save "" 表示禁用 RDB 持久化
# 900秒(15分钟)内至少有1个key被改变
# 300秒(5分钟)内至少有10个keys被改变
# 60秒(1分钟)内至少有10000个keys被改变
save 900 1      
save 300 10     
save 60 10000   

# 如果后台保存失败,Redis 是否停止接受写操作
# 这可以让用户意识到数据没有正确持久化到磁盘上
# stop-writes-on-bgsave-error yes

# 是否压缩 RDB 文件,默认开启
# 压缩会消耗 CPU,但可以显著减少文件大小
rdbcompression yes

# 是否在保存 RDB 文件后进行校验和检查,默认开启
# 这会在文件末尾添加一个 CRC64 校验和,会有约 10% 的性能损耗
rdbchecksum yes

# RDB 文件名
dbfilename dump.rdb

# 数据库存放目录
# 必须是一个已存在的目录,Redis 会在该目录下创建 RDB 和 AOF 文件
dir /data

# #######AOF持久化相关设置
# 是否开启 AOF 持久化,默认关闭
# AOF 提供比 RDB 更好的持久化保证
appendonly yes

# AOF 文件名
appendfilename "appendonly.aof"

# AOF 同步策略
# always:每次写入都同步,最安全但最慢
# everysec:每秒同步一次,默认,足够安全且性能较好
# no:由操作系统决定何时同步,最快但最不安全
appendfsync everysec

# 当 AOF 重写或写入时,是否禁用 fsync
# 设置为 yes 可能在某些 Linux 配置下延迟较大
no-appendfsync-on-rewrite no

# 自动重写 AOF 文件的条件
# 当 AOF 文件大小比上次重写后增长超过指定百分比时触发重写
auto-aof-rewrite-percentage 100
# AOF 文件最小大小,超过此大小才会考虑自动重写
auto-aof-rewrite-min-size 64mb

# 是否在 Redis 启动时检查并修复 AOF 文件
# 如果 AOF 文件末尾被截断,Redis 可以加载尽可能多的数据
aof-load-truncated yes

# 开启混合持久化(Redis 4.0+)
# AOF 重写时,将 RDB 内容作为前缀写入 AOF 文件
# 加载时先加载 RDB 部分,再加载 AOF 部分
aof-use-rdb-preamble yes

# AOF 重写期间的增量 fsync,默认开启
aof-rewrite-incremental-fsync yes

# #######内存淘汰策略设置
# 最大内存限制,设置为 0 表示无限制
# 可以使用单位:bytes、k/K、m/M、g/G
maxmemory 512m

# 内存达到上限后的淘汰策略
# volatile-lru:从设置了过期时间的 keys 中使用 LRU 算法淘汰
# allkeys-lru:从所有 keys 中使用 LRU 算法淘汰
# volatile-lfu:从设置了过期时间的 keys 中使用 LFU 算法淘汰(Redis 4.0+)
# allkeys-lfu:从所有 keys 中使用 LFU 算法淘汰(Redis 4.0+)
# volatile-random:从设置了过期时间的 keys 中随机淘汰
# allkeys-random:从所有 keys 中随机淘汰
# volatile-ttl:淘汰即将过期的 keys(剩余 TTL 最小的)
# noeviction:不淘汰,返回错误(默认)
maxmemory-policy allkeys-lfu

# LRU/LFU 算法的采样数量
# 数值越大越精确但消耗更多 CPU
maxmemory-samples 5

# LFU 算法的衰减时间(分钟),默认 1
# 控制 LFU 计数器的衰减速度
lfu-decay-time 1

# LFU 计数器的对数因子,默认 10
# 数值越小计数器增长越快
lfu-log-factor 10

# #######慢查询日志
# 慢查询日志阈值(微秒)
# 执行时间超过此值的命令会被记录 10000us=10ms
slowlog-log-slower-than 10000

# 慢查询日志最大长度
slowlog-max-len 128

# 延迟监控阈值(毫秒),0 表示关闭
latency-monitor-threshold 0

部署运行指令

bash 复制代码
# 这里 \ 是用作换行,实际情况下如果放在一行去写,就可以删掉\
# Linux系统上"\"会被识别为换行,Windows上建议把"\"删掉
docker run -d \
--name redis-server \
-p 6379:6379 \
-v /home/lcx/redis-server/redis-data:/data \
-v /home/lcx/redis-server/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/lcx/redis-server/redis-logs:/var/log/redis \
--restart=always \
--privileged=true \
--network your_net \
redis \
redis-server /usr/local/etc/redis/redis.conf

-d:以"分离模式"(detached mode)运行容器,即在后台运行容器,不会占用当前的命令行界面。

--name redis-server 指定容器名称为redis-server

-v /home/lcx/redis-server/redis-data:/data 挂载数据卷,前一个目录为宿主机目录,根据自身实际情况修改

-v /home/lcx/redis-server/redis.conf:/usr/local/etc/redis/redis.conf 挂载配置文件,前一个目录为宿主机目录,根据自身实际情况修改

-v /home/lcx/redis-server/redis-logs:/var/log/redis 挂载redis日志目录,前一个目录为宿主机目录,根据自身实际情况修改;其中此处容器内日志文件目录在配置文件中有设置,如果为指定设置,一般在/data目录下

-p 6379:6379 格式(宿主机端口:docker容器内运行端口)redis默认端口为6379,如果配置文件有修改port,则自行修改冒号后的值,如果暴露给外界访问端口想修改则修改冒号前端口

--restart=always 可选,设置容器的重启策略为 always,意味着无论容器因为什么原因退出,Docker 都会自动重启它

--network your_net 可选,指定容器运行网络

redis 格式为 redis:指定版本 ,不加指定,默认最新

redis-server /usr/local/etc/redis/redis.conf 启动配置文件

可能存在的问题

1、日志文件权限问题 Can't open the log file: Permission denied

查看运行日志

复制代码
[lcx@bogon redis-server]$ docker logs redis-server
Starting Redis Server

*** FATAL CONFIG FILE ERROR (Redis 8.6.0) ***
Can't open the log file: Permission denied

解决方案:

执行以下指令,修改宿主机文件夹权限

bash 复制代码
# 设置日志目录权限(Redis 容器内使用 uid 999)
sudo chown -R 999:999 /home/lcx/redis-server/redis-logs
# 同时确保数据目录权限正确
sudo chown -R 999:999 /home/lcx/redis-server/redis-data
相关推荐
小马爱打代码9 小时前
Redis 集群方案详解:主从复制、哨兵、脑裂、分片集群和哈希槽
数据库·redis·哈希算法
Irene199111 小时前
Win11 自动更新导致 Docker Desktop 无法正常启动,Oracle SQL Developer 启动时报错
docker·更新
darkdragonking14 小时前
OpenEuler 22.03 ,以docker ce 安装 Milvus 及可视化工具
docker·容器·milvus
我是一颗柠檬14 小时前
【Redis】发布订阅与消息队列Day8(2026年)
数据库·redis·后端·缓存
sukioe14 小时前
Redis 持久化+高可用详解:RDB/AOF/混合/主从/哨兵/集群
数据库·redis·缓存
我叫张土豆15 小时前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
真上帝的左手16 小时前
11. 容器化 vs 虚拟化-K8s-工作负载实战
云原生·容器·kubernetes
XWalnut16 小时前
Redis从入门到精通
数据库·redis·缓存
极客先躯17 小时前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
木雷坞19 小时前
Docker Hub、GHCR、Quay 混在一起后,镜像源要分开测
运维·docker