0

我有一个带有三个节点的小型 docker swarm。

$ sudo docker node ls
ID                            HOSTNAME                                     STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
jmsidw84mom3k9m4yoqc7rkj0     ip-172-31-a-x.region.compute.internal    Ready               Active                                  19.03.1
qg1njgopzgiainsbl2u9bmux4 *   ip-172-31-b-y.region.compute.internal   Ready               Active              Leader              19.03.1
yn9sj3sp5b3sr9a36zxpdt3uw     ip-172-31-c-z.region.compute.internal   Ready               Active                                  19.03.1

我正在运行三个 redis 容器。

$ sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS
6j9mmnpgk5j4        redis              replicated          3/3                 172.31.m.n:5000/redis

但我无法让 redis sentinel 在它们之间工作 - 阅读日志看起来好像有连接失败。

只是将它们作为三个独立的 redis 实例站起来,我一直在测试连接性,我可以从任何主机上的 shell 远程登录到另一个节点的主机 IP,并连接到容器上运行的服务。如果我从容器上的外壳执行相同操作,则无法连接。

IE

[centos@172.31.a.x ~]$ telnet 172.31.b.y 6379
Trying 172.31.b.y...
Connected to 172.31.b.y.
Escape character is '^]'.
^CConnection closed by foreign host.
[centos@172.31.a.x ~]$ sudo docker exec -it 4d5abad441b8 sh
/ # telnet 172.31.14.12 6379

然后它挂起。同样,我不能在 443 上从容器内远程登录到 google.com,但我可以在主机上。不过奇怪的是,ping 确实会脱离容器。

有什么建议么?

4

1 回答 1

0

啊。

redis 方面是一个红鲱鱼,我现在可以调试它 - 我正在考虑默认情况下 telnet 不在容器(alpine linux)上,所以必须有一些连接,但我无法 telnet 到它的网络服务器端口声称它是在安装时下载的。

事实证明,安装的 telnet 客户端 alpine linux 的版本有些问题 - nmap 和 curl 的行为符合预期。

于 2019-09-05T07:06:38.430 回答