代码之家  ›  专栏  ›  技术社区  ›  vivekyad4v

Docker swarm模式| telnet:无法连接到远程主机:无法访问主机

  •  1
  • vivekyad4v  · 技术社区  · 5 年前

    bash-4.3# telnet mydb.cd1xokc1nbn4.ap-southeast-1.rds.amazonaws.com 5432
    telnet: can't connect to remote host (10.0.2.3): Host is unreachable
    bash-4.3# exit
    
    ubuntu@ip-10-0-2-157:~/metabase$ telnet mydb.cd1xokc1nbn4.ap-southeast-1.rds.amazonaws.com 5432
    Trying 10.0.2.3...
    Connected to mydb.cd1xokc1nbn4.ap-southeast-1.rds.amazonaws.com.
    Escape character is '^]'.
    

    我很确定这与Swarm中的网络有关,因为如果我 docker run ,我可以连接到数据库。

    Docker版本-

    Client:
     Version:           18.09.0
     API version:       1.39
     Go version:        go1.10.4
     Git commit:        4d60db4
     Built:             Wed Nov  7 00:49:01 2018
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          18.09.0
      API version:      1.39 (minimum version 1.12)
      Go version:       go1.10.4
      Git commit:       4d60db4
      Built:            Wed Nov  7 00:16:44 2018
      OS/Arch:          linux/amd64
      Experimental:     false
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   vivekyad4v    5 年前

        .......
        networks:
          - metabase
    
    networks:
      metabase:
        external:
          name: "host"
    

    PS-使用主机网络模式后工作正常,但不建议这样做。更多的答案是欢迎的,因为我不知道确切的原因,因为我认为它是与默认的swarm虚拟网络工作。

        2
  •  0
  •   stempler    3 年前

    我也有同样的问题-基于你想要连接的IP地址,我想你的问题也有同样的原因。

    Docker Swarm覆盖网络默认使用10.0版本中的IP地址。x、 x范围。在您的例子中,您希望连接到数据库的服务/容器很可能位于10.0中的Docker网络中。2.x IP范围-因此它将尝试通过该网络连接到数据库主机,这显然不起作用。

    所以你需要解决这个冲突。一种方法是配置Swarm以使用不同的IP范围。缺点是,您只能在初始化Swarm时执行此操作(因此您必须重新创建它)。例如:

    docker swarm init --default-addr-pool 10.10.0.0/16
    

    验证其是否按预期工作的一种方法是随后创建一个新网络并检查子网:

    docker network create -d overlay proxy
    docker network inspect proxy | grep Subnet