办理docker运行redis报错:Fatal error, can‘t open config file /etc/red
征象如下:https://img-blog.csdnimg.cn/e809069b2fe2456d934180009945e51c.png
看了报错是权限问题,然后发现redis1.conf的权限果然不大对,
以是运行 chmod o+r 添加权限
https://img-blog.csdnimg.cn/2b1ca680bc70434a93971261b4e97882.png
但是启动后容器自动退出:
https://img-blog.csdnimg.cn/fa76995887c249e08fad77b3dbf15218.png
然后把redis-server改成绝对路径/usr/local/bin/redis-server
https://img-blog.csdnimg.cn/d0b43b2825d8499ca5f23c21bf4648fe.png
此时就能发现报错真正的原因:是原始redis.conf设置文件内容的问题,而不是文件自己挂载的问题。 这里提示的其实就是容器内部没有/var/lib/redis这个路径
然后创建一个docker 存储卷,并挂载给/var/lib/redis
docker volume create myvolume
docker run --name xxxx -v myvolume:/var/lib/redis xxxxxx
https://img-blog.csdnimg.cn/9889a3fc8a0642edb6626e15ffca38f2.png
https://img-blog.csdnimg.cn/b8779d05d5c44a0392a3363e4e4e1890.png
但是容器还是自动退出了:
https://img-blog.csdnimg.cn/b8bb2cf50f784e88a1a7cd8a0fde2716.png
最后发现是redis设置文件中的daemonize yes选项在作怪,把它注释掉或者设成no
https://img-blog.csdnimg.cn/66bcaa60ab2a421fbb42ac3ce4c2609b.png
然后容器终于不再自动退出了可以正常启动了, 但是又报错
Failed opening the RDB file dump.rdb (in server root dir /var/lib/redis) for saving: Permission denied
看起来还是权限问题:
https://img-blog.csdnimg.cn/57a2b70b83204a108e6ac464c43ca820.png
这个错误表明 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
https://img-blog.csdnimg.cn/75a23dd1a7f24cf1ab7ef1b84677fc65.png
https://img-blog.csdnimg.cn/bd05231f87094bd7acc8f9fe267e19c6.png
必要留意一点:
redis.conf内里不要有logfile设置选项,否则docker logs 就没有日志输出了
https://img-blog.csdnimg.cn/fbffbfc92a7a4b498ae4d55440d99419.png
https://img-blog.csdnimg.cn/972b6ec062214df5882e1fbdbb1e52f0.png
总结一下:
办理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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]