docker部署redis后,修改配置文件的requirepass后无效

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

解决方案

执行docker run命令时不要使用参数–requirepass

docker部署redis流程问题复现

1. 启动redis容器

在服务器docker运行时执行下列命令。会自动在远程仓库下载镜像
redis:

docker run \
--restart=always \
--privileged=true \
--log-opt max-size=100m \
--log-opt max-file=3 \
-p 6379:6379 \
--name redis_1 \
-v redis_conf:/etc/redis \
-v redis_data:/data \
-v /etc/localtime:/etc/localtime:ro \
-d redis:7.0.5 \
redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass 123456

–privileged=true 这个参数容器内的root拥有真正root权限否则容器内root只是外部普通用户权限
–restart=always 总是开机启动可以改为其他形式或者直接取消 https://blog.csdn.net/chj_1224365967/article/details/109029856
–log是日志方面的https://www.cnblogs.com/cxbhakim/p/8677928.html
-p 6379:6379 将6379端口挂载出去
–name 给这个容器取一个名字
-v 数据卷挂载
redis_conf:/etc/redis/redis.conf 这里是将 liunx 路径下的 redis_conf(docker会自动生成一个路径统一管理) 和redis下的redis.conf 挂载在一起。
redis_data:/data 这个同上
当宿主机为 Linux 系统时我们可以直接将宿主机上的/etc/timezone和/etc/localtime挂载到容器中这样可以保持容器和宿主机时区和时间一致。
-d 表示后台启动redis
redis 镜像名称
redis-server /etc/redis/redis.conf 以配置文件启动redis加载容器内的conf文件最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的redis_conf
–appendonly yes 开启redis 持久化 (aof append only file)

注意这里的密码最好别设置否则这里设置的密码的优先级会高于配置文件以至于修改配置文件中的requirepass后redis密码并没有被修改
–requirepass 123456 设置密码 如果你是通过docker 容器内部连接的话就随意可设可不设。但是如果想向外开放的话一定要设置)

再执行docker ps容器启动成功后如下图所示。
在这里插入图片描述

2. 找到挂载在服务器上的文件路径

执行docker volume ls找到刚配置的volume名称。
在这里插入图片描述
然后执行docker volume inspect redis_conf会找到该redis_conf在服务器上的路径。
在这里插入图片描述
在该目录下放入文件redis.conf
在这里插入图片描述

3. 修改配置文件

自己新建一个文件将下面的配置复制粘贴进去即可。当然个人推荐去下载官方配置不清楚的配置可以自行百度
然后修改一下requirepass再重启容器即可成功修改密码注意 如果执行docker run命令时使用了参数–requirepass则修改了配置之后无法修改redis密码。

# 默认情况bind=127.0.0.1只能接受本机的访问请求
# 不写的情况下无限制接受任何ip地址的访问
# 生产环境肯定要写你应用服务器的地址服务器是需要远程访问的所以需要将其注释掉

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
# bind 127.0.0.1

# 如果开启了protected-mode那么在没有设定bind ip且没有设密码的情况下
# Redis只允许接受本机的响应
# 将本机访问保护模式设置noredis在服务器上的时候就需要设置为no
protected-mode no

# 端口号默认 6379
port 6379

# 设置tcp的backlogbacklog其实是一个连接队列backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。
# 在高并发环境下需要一个高backlog值来避免慢客户端连接问题。
# 注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值128
# 所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog128两个值来达到想要的效果
tcp-backlog 511

# 设置客户端连接后进行任何其他指定前需要使用的密码。
# 警告因为 redis 速度相当快所以在一台比较好的服务器下
# 一个外部的用户可以在一秒钟进行 150K 次的密码尝试
# 这意味着你需要指定非常非常强大的密码来防止暴力破解。
requirepass 123456

# 设置客户端连接时的超时时间单位为秒。当客户端在这段时间内没有发出任何指令那么关闭该连接
timeout 0 

# 指定 TCP 连接是否为长连接,"侦探"信号有 server 端维护。默认为 0.表示禁用。
tcp-keepalive 300 

# 默认情况下redis 不是在后台运行的如果需要在后台运行把该项的值更改为 yes。
daemonize no 

supervised no

# 当 Redis 在后台运行的时候Redis 默认会把 pid 文件放在/var/run/redis.pid
# 你可以配置到其他地址。当运行多个 redis 服务时需要指定不同的 pid 文件和端口。
pidfile /var/run/redis_6379.pid 

# log 等级分为 4 级debug,verbose, notice, 和 warning。生产环境下一般开启 notice。
loglevel notice 

# 配置 log 文件地址默认使用标准输出即打印在命令行终端的窗口上修改为日志文件目录。
logfile "" 

# 设置数据库的个数可以使用 SELECT 命令来切换数据库。默认使用的数据库是 0 号库。默认 16 个库。
databases 16 

always-show-logo yes

# 保存数据快照的频率即将数据持久化到 dump.rdb 文件中的频度。
# 用来描述"在多少秒期间至少多少个变更操作"触发 snapshot 数据保存动作。
# 默认设置意思是
# if(60 秒之内有 10000 个 keys 发生变化时){
# 	进行镜像备份
# }else if(300 秒之内有 10 个 keys 发生了变化){
# 	进行镜像备份
# }else if(900 秒之内有 1 个 keys 发生了变化){
# 	进行镜像备份
# }
save 900 1
save 300 10
save 60 10000

# 当持久化出现错误时是否依然继续进行工作是否终止所有的客户端 write 请求。
# 默认设置"yes"表示终止一旦 snapshot 数据保存故障那么此 server 为只读服务。
# 如果为"no"那么此次 snapshot 将失败但下一次 snapshot 不会受到影响
# 不过如果出现故障,数据只能恢复到"最近一个成功点"。
stop-writes-on-bgsave-error yes 

# 在进行数据镜像备份时是否启用 rdb 文件压缩手段默认为 yes。
# 压缩可能需要额外的cpu 开支不过这能够有效的减小 rdb 文件的大有利于存储/备份/传输/数据恢复。
rdbcompression yes 

# 读取和写入时候会损失 10%性能是否进行校验和是否对 rdb 文件使用 CRC64 校验和,默认为"yes"
# 那么每个 rdb 文件内容的末尾都会追加 CRC 校验和利于第三方校验工具检测文件完整性。
rdbchecksum yes 

# 镜像备份文件的文件名默认为 dump.rdb。
dbfilename dump.rdb 

# 数据库镜像备份的文件 rdb/AOF 文件放置的路径。
# 这里的路径跟文件名要分开配置是因为Redis 在进行备份时先会将当前数据库的状态写入到一个临时文件中
# 等备份完成时再把该临时文件替换为上面所指定的文件而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。
dir ./ 

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

# slave 与 master 的连接,是否禁用 TCP nodelay 选项。
# "yes"表示禁用,那么 socket 通讯中数据将会以 packet 方式发送(packet 大小受到 socket buffer 限制)。
# 可以提高 socket通讯的效率(tcp交互次数),但是小数据将会被buffer,不会被立即发送,对于接受者可能存在延迟。
# "no"表示开启 tcp nodelay 选项,任何数据都会被立即发送,及时性较好,但是效率较低建议设为 no。
repl-disable-tcp-nodelay no 

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# 默认情况下redis 会在后台异步的把数据库镜像备份到磁盘但是该备份是非常耗时的而且备份也不能很频繁。
# 所以 redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。
# 开启 append only 模式之后redis 会把所接收到的每一次写操作请求都追加appendonly.aof 文件中
# 当 redis 重新启动时会从该文件恢复出之前的状态。但是这样会造成 appendonly.aof 文件过大
# 所以 redis 还支持了 BGREWRITEAOF 指令对appendonly.aof 进行重新整理。
# 如果不经常进行数据迁移操作推荐生产环境下的做法为关闭镜像开启 appendonly.aof
# 同时可以选择在访问较少的时间每天对 appendonly.aof进行重写一次。
# 另外对 master 机器,主要负责写建议使用 AOF,对于 slave,主要负责读挑选出 1-2 台开启 AOF其余的建议关闭。
appendonly yes

# aof 文件名字默认为 appendonly.aof。
appendfilename "appendonly.aof"

# 在 AOF rewrite 期间,是否对 aof 新记录的 append 暂缓使用文件同步策略,主要考虑磁盘 IO开支和请求阻塞时间。
# 默认为 no,表示"不暂缓",新的 aof 记录仍然会被立即同步。
no-appendfsync-on-rewrite no

# 当 Aof log 增长超过指定比例时重写 log file 设置为 0 表示不自动重写 Aof 日志
# 重写是为了使 aof 体积保持最小而确保保存最完整的数据。
auto-aof-rewrite-percentage 100

# 触发 aof rewrite 的最小文件尺寸。
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

# lua 脚本运行的最大时间。
lua-time-limit 5000

# "慢操作日志"保留的最大条数,"记录"将会被队列化,如果超过了此长度,旧记录将会被移除。
# 可以通过"SLOWLOG args"查看慢记录的信息(SLOWLOG get10,SLOWLOG reset)。
slowlog-max-len 128

notify-keyspace-events ""



# -------------------------------------------这部分配置包含压缩列表、跳表等底层数据结构配置----------------

# hash 类型的数据结构在编码上可以使用 ziplist 和 hashtable。
# ziplist 的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,
# 性能和 hashtable 几乎一样.因此 redis 对hash 类型默认采取 ziplist。
# 如果 hash 中条目的条目个数或者 value 长度达到阀值,将会被重构为 hashtable。
# 这个参数指的是 ziplist 中允许存储的最大条目个数默认为 512建议为 128。
hash-max-ziplist-entries 512

# ziplist 中允许条目 value 值最大字节数默认为 64建议为 1024
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

# intset 中允许保存的最大条目个数,如果达到阀值,intset 将会被重构为 hashtable。
set-max-intset-entries 512

# zset 为有序集合,2 中编码类型:ziplist,skiplist。因为"排序"将会消耗额外的性能,当 zset中数据较多时,将会被重构为 skiplist。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

# 是否开启顶层数据结构的 rehash 功能,如果内存允许,请开启。rehash 能够很大程度上提高K-V 存取的效率。
activerehashing yes

# Redis server 执行后台任务的频率,默认为 10,此值越大表示 redis 对"间歇性 task"的执行次数越频繁(次数/)
# "间歇性 task"包括"过期集合"检测、关闭"空闲超时"的连接等,此值必须大于 0 且小于 500。
# 此值过小就意味着更多的 cpu 周期消耗,后台 task 被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。
# 建议采用默认值。
hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redisDocker

“docker部署redis后,修改配置文件的requirepass后无效” 的相关文章