簡體   English   中英

Docker 集群模式 | telnet:無法連接到遠程主機:主機無法訪問

[英]Docker swarm mode | telnet: can't connect to remote host : Host is unreachable

在 AWS EC2 上,嘗試從 Swarm 容器連接到私有 RDS 實例。 它在容器內失敗,但在主機上運行良好。 我有一個主節點和節點設置 -

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

我能夠通過使用主機網絡模式使其工作。

    .......
    networks:
      - metabase

networks:
  metabase:
    external:
      name: "host"

PS - 使用主機網絡模式后工作正常,但不建議這樣做。 歡迎提供更多答案,因為我不確定確切原因,因為我認為它為什么使用默認的群虛擬網絡。

我遇到了同樣的問題 - 根據您想要連接的 IP 地址,我猜您的問題有相同的原因。

Docker Swarm 覆蓋網絡默認使用 10.0.xx 范圍內的 IP 地址。 在您的情況下,您想要連接到數據庫的服務/容器可能位於 10.0.2.x IP 范圍內的 Docker 網絡中 - 因此它會嘗試通過該網絡連接到數據庫主機,這顯然不會工作。

所以你需要解決這個沖突。 一種方法是配置 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

如果您可以控制 AWS 子網的 IP 范圍,您可能還可以更改那里的 IP 地址范圍,以避免這種問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM