Redis 6 Docker容器ACL配置未生效的问题求助
Redis Docker环境下ACL配置不生效的排查与修复
根本原因
当前配置流程缺少关键环节:仅将自定义配置文件复制到镜像中,但没有让Redis启动进程在启动时加载这份自定义配置。
官方redis:6.2.1镜像的默认启动逻辑是直接执行无参数的redis-server,使用镜像内置的默认配置启动服务。你放在镜像内的redis.conf、users.acl从始至终没有被Redis进程读取,因此配置中指定的ACL文件加载逻辑完全没有触发,最终只输出镜像内置的默认default用户规则。
修复步骤
1. 修改Dockerfile,指定启动加载的配置文件路径
在原有Dockerfile的基础上,新增启动指令,明确告诉Redis进程启动时要加载你复制进去的自定义redis.conf,同时补充文件权限配置,避免Redis进程无权限读取ACL规则文件:
FROM redis:6.2.1 COPY redis.conf /usr/local/etc/redis/redis.conf COPY --chown=redis:redis users.acl /etc/redis/users.acl EXPOSE 6379 # 新增启动指令,指定加载自定义配置文件 CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
2. 确认配置路径匹配性
你当前两份配置的路径逻辑是正确的,无需调整:
- 自定义
redis.conf存储路径:/usr/local/etc/redis/redis.conf - 自定义
redis.conf中声明的ACL文件路径:aclfile /etc/redis/users.acl - 镜像中
users.acl的实际存储路径:/etc/redis/users.acl
生效验证
重新构建镜像并启动容器后,在容器内执行redis-cli运行ACL LIST,将返回两条用户规则:
1) "user default on nopass ~* &* +@all" 2) "user test on #password ~* &* +@all"
如果看到test用户的配置,就说明ACL已经成功加载。可执行redis-cli --user test --pass password测试自定义用户的登录权限,确认规则符合预期。
新手提示:Redis的配置文件不会被自动扫描加载,无论在什么部署场景下,都需要在启动
redis-server时通过参数显式指定配置文件的完整路径,否则所有自定义配置都不会生效。
内容的提问来源于stack exchange,提问作者EM90
相关产品推荐
相关产品推荐

