Docker容器Redis导入dump.rdb后无数据的排查咨询
以下是几个常见的原因和对应的排查、解决步骤:
确认容器挂载路径匹配
先检查你的docker-compose.yml中Redis服务的volume配置,是否将宿主机的\database\redis\provider\default_provider_1\目录正确挂载到了Redis容器内的rdb存储目录(官方镜像默认是/data)。如果挂载路径不对应,容器根本无法读取你放置的dump.rdb文件。
可以通过docker inspect <redis容器名称/ID>命令查看Mounts字段,核对宿主机与容器内的目录映射关系。修复dump.rdb的权限问题
Redis官方镜像默认以redis用户(UID/GID通常为999)运行进程,若宿主机上的dump.rdb文件所有者或权限不正确,容器内的Redis进程会无法读取该文件。
执行以下命令调整权限:chown 999:999 /database/redis/provider/default_provider_1/dump.rdb chmod 644 /database/redis/provider/default_provider_1/dump.rdb检查Redis是否禁用了RDB加载
查看docker-compose.yml中Redis服务的启动命令或自定义配置,是否存在--save ""这类禁用RDB持久化的参数——如果有,Redis启动时会跳过加载dump.rdb的步骤。
进入容器执行redis-cli config get save,若返回空数组,说明RDB持久化被禁用。可以修改配置添加合理的save规则(比如save 60 1000),或移除禁用参数后重启容器。验证dump.rdb文件的有效性
若dump.rdb文件本身损坏,或与容器内Redis版本跨大版本不兼容,也会导致加载失败。
在宿主机执行redis-check-rdb /database/redis/provider/default_provider_1/dump.rdb检查文件完整性,同时用redis-server --version分别确认生成dump.rdb的环境与容器内的Redis版本是否匹配。确认连接的是目标Redis实例
即使指定了-h localhost -p 6379,若宿主机上还有其他Redis进程运行,或容器端口映射错误,可能连接到了本地Redis而非容器实例。
用docker ps确认Redis容器的端口映射为6379:6379,再执行redis-cli -h localhost -p 6379 info server查看服务器信息,对比版本等标识确认连接的是目标容器。
内容的提问来源于stack exchange,提问作者Darren

