首页 > 解决方案 > Docker swarm redis 连接问题

问题描述

我有以下docker-compose.ymlredis 配置。

version: '3.5'

services:
  db:
    image: redis:latest
    command: redis-server --bind 0.0.0.0 --appendonly yes --protected-mode no

    ports:
      - target: 6379
        published: 6379
        protocol: tcp
        mode: ingress

有两个主机leader-0(经理)和redis-0(工人)

> root@leader-0:~# docker node ls
ID                            HOSTNAME               STATUS     
46tmallxr4l8xr7i90vlwntjq *   leader-0               Ready               
mofbedj4sqlxgnyatbxhlokc7     redis-0                Ready               

Redis 主机redis-0按预期在 localhost 上公开 6379 端口:

> root@redis-0:~# redis-cli -h 127.0.0.1 ping
PONG

但是 6379 在管理器上不可用(尽管应该):

> root@leader-0:~# redis-cli -h 127.0.0.1 ping
Could not connect to Redis at 127.0.0.1:6379: Connection timed out

有趣的部分是:

  1. Connection timed out(不拒绝)。
  2. redis-cli -h 127.0.0.1 ping在其他工作主机上按预期工作(返回PONG)。

Docker overlay mash 网络应该在每个主机的本地接口上公开 6379 端口,但看起来出了点问题,我搞砸了到底是什么。

manager 主机上的其他服务正常工作(我可以 curl http://localhost:${SERVICE_PORT}/)。

Manager 主机与工作主机具有相同的防火墙规则(+ 额外的端口打开)

标签: dockerredisswarm

解决方案


推荐阅读