解决docker运行redis报错:Fatal error, can‘t open config file /etc/redis/redis.conf以及启动redis后自动退出容器

现象如下:

 看了报错是权限问题,然后发现redis1.conf的权限果然不大对,

所以运行 chmod o+r 添加权限

但是启动后容器自动退出:

然后把redis-server改成绝对路径/usr/local/bin/redis-server

 此时就能发现报错真正的原因:是原始redis.conf配置文件内容的问题,而不是文件本身挂载的问题。 这里提示的其实就是容器内部没有/var/lib/redis这个路径

然后创建一个docker 存储卷,并挂载给/var/lib/redis

docker volume create myvolume

docker run --name xxxx  -v myvolume:/var/lib/redis xxxxxx

但是容器还是自动退出了:

 最后发现是redis配置文件中的daemonize yes选项在作怪,把它注释掉或者设成no

然后容器终于不再自动退出了可以正常启动了, 但是又报错

Failed opening the RDB file dump.rdb (in server root dir /var/lib/redis) for saving: Permission denied

 看起来还是权限问题:

这个错误表明 Redis 在持久化数据时无法打开 RDB 文件进行保存时,缺少写入权限。这通常是由于挂载的存储卷myvolume的权限问题导致的。

经过测试发现:给存储卷挂载时加:rw参数也是无效的

解决办法是:在宿主机redis配置文件所在的目录,创建一个tmp目录,然后给777权限,

然后把这个目录挂载给容器/var/lib/redis路径

mkdir tmp

chmod 777 tmp

docker run --name xxxx  -v `pwd`/tmp:/var/lib/redis xxxxx

需要注意一点:

redis.conf里面不要有logfile配置选项,否则docker logs 就没有日志输出了

 

 

总结一下:

解决docker运行redis报错:Fatal error, can't open config file /etc/redis/redis.conf以及启动redis后自动退出容器问题的解决办法:

1.  被挂载的redis.conf配置文件必须有足够的权限,能被root用户以外的用户所读取, 也就是能被docker容器内部读取

2.  redis.conf配置文件一定不能有daemonize yes选项,这也是redis容器自动退出的关键原因。

3. 需要从宿主机路径从外部挂载到容器内部路径/var/lib/redis, 否则会报错:Can't chdir to '/var/lib/redis': No such file or directory

4. 如果启用了redis持久化,  那么 容器内部路径/var/lib/redis也是需要读写权限的

 解决办法:在宿主机redis配置文件所在的目录,创建一个tmp目录,然后给777权限,

然后把这个目录挂载给容器/var/lib/redis路径

mkdir tmp

chmod 777 tmp

docker run --name xxxx  -v `pwd`/tmp:/var/lib/redis xxxxx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值