在 Docker 中持久化 Redis 配置

在 Docker 中修改了 Redis 配置后试图使用 CONFIG REWRITE 命令会报错:

(error) ERR The server is running without a config file

个人认为在 Docker 容器内运行 Redis 时,可能会出现:修改配置后 Docker容器临时 stop,restart 后由于 Docker 容器无状态特性修改的配置丢失的情景,所以有必要研究如何将配置持久化

宿主机环境:Windows 10 专业版

失败的尝试:

下文中的xxxxx为文件所在绝对路径

  1. 试图在容器内根据 Redis 配置文件的常用路径手动查找.conf配置文件,发现根本找不到

  2. 试图将 Windows 宿主机内的 Redis 配置文件挂载进容器,报错相同,配置文件并不会被引用:

    docker run -d -v xxxxxxxxx\db1\data:/data -v xxxxxxxx\db1\redis-stack.conf:/redis-stack-server.conf -p 127.0.0.1:6379:6379 --name redis-db1 redis/redis-stack-server:latest
    
  3. 询问GPT4后试图在Redis启动参数中将Windows宿主机内的配置文件强行引入,但引入后从docker外无法连接Redis:

    Error: Server closed the connection
    

    且在docker内终端试图使用 CONFIG REWRITE 命令仍然会报错:

    ERR Rewriting config file: Device or resource busy
    

    怀疑可能是 Redis 进程本身或是 Docker 容器进程正在使用文件导致占用

    docker run -d -v xxxxxxx\db1\data:/data -v xxxxxxxx\db1\redis-stack.conf:/usr/local/etc/redis/redis.conf -p 127.0.0.1:6379:6379 --name redis-db1 redis/redis-stack-server:latest redis-server /usr/local/etc/redis/redis.conf
    
  4. 试图使用http://download.redis.io/redis-stable/redis.conf下载的配置文件挂载,在容器启动时即报错配置文件参数有误

解决方案
ERR Rewriting config file: Device or resource busy

该报错并不是告知文件被占用,还有可能来源于文件没有写入权限

为了让 Redis 有权限修改配置,必须挂载整个配置文件夹,而不是文件本身,并且文件夹权限应该开放可写

根据上文修改 Docker 命令为:

docker run -d -v xxxxxxx\db1\data:/data -v xxxxxxxx\db1\conf\:/usr/local/etc/redis/ -p 127.0.0.1:6379:6379 --name redis-db1 redis/redis-stack-server:latest redis-server /usr/local/etc/redis/redis-stack-server.conf

成功执行 CONFIG REWRITE 命令,配置文件在容器运行时成功被命令行更改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值