在亚马逊网络服务EC2上,尝试从集群容器连接到私有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 '^]'.我非常确定这与集群中的网络有关,因为如果我做了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发布于 2019-01-08 21:21:03
我能够通过使用主机网络模式使其工作。
.......
networks:
- metabase
networks:
metabase:
external:
name: "host"PS -它在使用主机网络模式后工作得很好,但不建议这样做。欢迎更多的答案,因为我不确定确切的原因,因为我认为它是与默认的集群虚拟网络工作。
发布于 2021-01-16 07:40:09
我也有同样的问题--根据你想要连接的IP地址,我猜你的问题也有同样的原因。
Docker Swarm overlay网络默认使用10.0.x.x范围内的IP地址。在你的例子中,你想要连接到数据库的服务/容器很可能在10.0.2.xIP范围内的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地址范围,以避免出现这种问题。
https://stackoverflow.com/questions/54090674
复制相似问题