Redis 的 READONLY 问题 您无法针对只读副本进行写入,而只能运行单个实例

Gle*_*len 7 redis docker

我在使用 redis 时遇到了这个问题,我有一个在套接字上侦听的节点应用程序,它永远持续运行并使用 redis 来存储数据。几个小时后,节点应用程序崩溃并记录:

READONLY You can't write against a read only replica
Run Code Online (Sandbox Code Playgroud)

问题是,我不知道为什么它会随机变成只读,我只有一个在 docker 容器内运行的 redis 实例,并设置了 appendonlydir 将所有数据存储在文件中。redis 容器可以完全访问该路径,并且我可以在主机上和容器内看到appendonlydir 文件。

我无法提供更多信息,错误就在上面,没有任何迹象表明为什么在写作完全正常工作几个小时后它会随机发生。

如果它对我的 dockerfile 有帮助:

FROM redis:7.0.0

RUN usermod --uid 1001 redis
RUN groupmod --gid 1001 redis

EXPOSE 6379

COPY ./docker/chat-redis/redis.conf /usr/local/etc/redis/redis.conf

CMD ["redis-server", "--include /usr/local/etc/redis/redis.conf"]
Run Code Online (Sandbox Code Playgroud)

主机上的文件夹属于 1001:1001,正如我所说,当我第一次启动 redis 容器时,可以完美地写入它。

如果您需要查看任何 redis.conf 文件,请告诉我,除了版本 7 的默认设置和打开的appendonlydir 之外,我里面没有太多内容。

该目录的权限还允许所有者写入 1001

drwx------ 2 1001 1001  4096 Jun  6 13:39 appendonlydir
Run Code Online (Sandbox Code Playgroud)

Gle*_*len 6

对于遇到此问题的任何人来说,似乎发生的情况是,当我将服务器设置放在一起时,我尚未关闭防火墙端口,有人进入了 redis 容器并将其更改为只读。

我没有为其设置密码,因为它仅在专用网络中使用,但显然有人在我有机会关闭外部端口之前就进入了。

从那以后我就设置了密码。

  • 嗨格伦。您确定是有人更改了 Redis 容器吗?我在我的 redis 容器上设置了密码,但过了一会儿,它又恢复为只读。你输入密码后是否又出现这种情况,如果是,后来是怎么解决的 (3认同)