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

现象如下:

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

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

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

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

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

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

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

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

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

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

docker volume create myvolume

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

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

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

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

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

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

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

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

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

 看起来还是权限问题:

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

这个错误表明 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

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

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

需要注意一点:

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

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

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

总结一下:

解决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

你可能感兴趣的:(docker,redis,容器)