Redis容器中redis.conf的requirepass配置不生效问题排查求助
我之前在Docker Alpine容器里跑Redis时也踩过类似的坑,给你几个具体的排查方向:
确认Redis启动时是否加载了目标配置文件
很多时候问题出在启动命令上——如果容器启动Redis时没指定/etc/redis.conf,它会默认加载内置的配置,完全不会读你修改的文件。
你可以先检查容器的启动参数:docker inspect redis_container | grep -A 10 "Cmd"或者进入容器查看Redis进程的启动命令:
docker exec -it redis_container ps aux | grep redis正常应该看到
redis-server /etc/redis.conf这样的命令,如果只有redis-server,那就是没加载你的配置文件。这种情况需要修改容器启动命令,加上配置文件路径,比如用docker run时指定redis-server /etc/redis.conf,或者在docker-compose里配置command字段。检查requirepass配置行的格式是否正确
虽然你说其他参数生效,但还是要确认这一行有没有拼写错误:- 确保没有被注释(行首没有
#) - 确保是
requirepass Abcd-1234(键和值之间有空格,不要连在一起) - 密码里的特殊字符有没有被转义?不过你的密码是
Abcd-1234,-不需要转义,这个应该没问题。
- 确保没有被注释(行首没有
排查是否有其他配置文件覆盖设置
有些Redis镜像会加载额外的配置目录(比如/etc/redis/conf.d/),如果这个目录下有其他.conf文件,里面的配置可能会覆盖/etc/redis.conf的设置。你可以进入容器查看:docker exec -it redis_container ls -l /etc/redis/conf.d/如果有文件,检查里面有没有
requirepass相关的配置。验证配置文件的权限是否正确
Alpine里Redis通常以redis用户运行,要确保/etc/redis.conf对该用户有读权限:docker exec -it redis_container ls -l /etc/redis.conf正常权限应该是
-rw-r--r--,所有者可以是root,只要其他用户有读权限就行。如果权限是-rw-------,那redis用户读不到,就会用默认配置。临时设置后尝试CONFIG REWRITE持久化(前提是启动时加载了配置文件)
如果你临时用CONFIG SET requirepass Abcd-1234生效了,想持久化到配置文件,可以执行:CONFIG REWRITE不过这个命令要求Redis的
dir配置指向一个有写入权限的目录,而且配置文件本身是可写的。执行后再查看/etc/redis.conf,应该能看到requirepass已经被写入了。
内容的提问来源于stack exchange,提问作者Junxi

