Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用docker运行Redis master和sentinel时出现问题_Docker_Redis_Redis Sentinel - Fatal编程技术网

使用docker运行Redis master和sentinel时出现问题

使用docker运行Redis master和sentinel时出现问题,docker,redis,redis-sentinel,Docker,Redis,Redis Sentinel,我希望有以下配置: 主机A上有1个主机和2个哨兵 主机B上有1个从机和1个哨兵 对于Master,我创建了dockerfile,如下所示: FROM redis COPY redis.conf /etc/redis/redis.conf COPY sentinel.conf /etc/redis/sentinel.conf CMD [ "redis-server", "/etc/redis/redis.conf" ] CMD [ "redis

我希望有以下配置:

  • 主机A上有1个主机和2个哨兵
  • 主机B上有1个从机和1个哨兵
对于Master,我创建了dockerfile,如下所示:

FROM redis
COPY redis.conf /etc/redis/redis.conf
COPY sentinel.conf /etc/redis/sentinel.conf
CMD [ "redis-server", "/etc/redis/redis.conf" ]
CMD [ "redis-sentinel", "/etc/redis/sentinel.conf" ]
CMD [ "redis-sentinel", "/etc/redis/sentinel.conf" ]
所有这些看起来都很好,当我尝试运行docker容器时,它不会抛出任何错误,看起来很好。 但当我尝试使用redis cli连接到容器时,我发现了以下错误

错误: 无法在127.0.0.1:6379连接到Redis:连接被拒绝

我无法理解为什么它无法连接?还有,如果有人能告诉我是否以正确的方式创建dockerfile

注意:正在尝试使用下面的命令进行连接

docker exec -it rdbcontainer redis-cli

Dockerfile只能有一条CMD指令,如果指定了多条,则将执行最后一条指令。因此,这就是为什么您可以访问sentinel,但不能访问redis服务器

如果要执行多个命令,则应改为使用RUN,并对主进程使用CMD


但我不建议使用RUN for sentinel或redis server,因为Docker容器非常轻量级,每个容器都应该关注自己的进程(CMD)。对于sentinels和redis server,您可以在同一台主机上创建多个容器(docker compose应该是一个潜在的解决方案)。

您正在进入多进程容器的领域,对于这种特定情况,推荐的方法是@Gawain已经说过的,每个redis进程使用一个容器,并使用docker compose将其全部包装起来

但在这种情况下,当您需要在同一个容器上启动多个进程时,这是一个令人大开眼界的问题。这里的主要主题是init进程和信号转发,就像我使用过的最好的作者一样

我喜欢这种方法的一个事实是,您可以以这样一种方式设置s6,即如果任何受监控的进程崩溃,整个容器将崩溃,从而触发Kubernetes环境上的重建。您不希望容器从外部看起来很健康,并且它的一个子进程失败(这是Docker宣扬的每个容器一个进程的咒语的优点之一)


这是同一位作者的一篇文章,他用提到的安全机制启动了多个进程,以防出现任何故障。

我刚刚尝试连接到sentinel指定端口,它成功了,但我不确定我看不到其他sentinel。命令:docker exec-it rdbcontainer redis cli-p 26379