Docker部署本地Redis执行ACL SAVE命令失败的求助
解决Docker部署Redis时ACL SAVE命令的报错问题
问题原因
- 权限拒绝错误:容器内Redis进程以
redis用户(默认UID 999)运行,/var/lib/redis是容器镜像自带的系统目录,该用户无写入权限,导致无法创建ACL临时文件。 - 设备资源忙错误:直接将宿主机的
users.acl挂载到容器内/var/lib/redis/users.acl,Redis执行ACL SAVE时会先创建临时文件再重命名覆盖原文件,但跨文件系统(宿主机与容器)的重命名操作不被允许,触发该报错。
解决步骤
1. 修改Redis配置文件的ACL路径
将redis.conf中的aclfile路径指向容器内Redis默认有权限的/data目录:
# redis.conf aclfile /data/users.acl ## cluster is not enabled
2. 调整Docker Compose的挂载配置
把users.acl挂载到容器的/data目录下,确保和Redis数据目录在同一挂载卷中:
version: "3.8" services: redis_local: container_name: redis_local image: redis:6.2.2 restart: always command: - /var/lib/redis/redis.conf ports: - 6379:6379 volumes: - ./redis.conf:/var/lib/redis/redis.conf - ./users.acl:/data/users.acl - ./redis_data:/data
3. 修复宿主机文件/目录权限
确保容器内redis用户能读写相关文件和目录,在宿主机执行以下命令:
chown -R 999:999 ./redis_data ./users.acl
4. 重启Redis服务
重新启动容器使配置生效:
docker-compose down && docker-compose up -d
完成以上操作后,再次执行ACL SAVE命令即可正常将ACL规则写入文件。
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

