Docker:能够从主机远程login远程机器,但不能从容器远程login

我们在ECS上部署了一对Docker容器。 容器内的应用程序使用远程服务,因此需要使用它们的10.XXX私有IP访问它们。

我们使用Docker 1.13与CentOS 7和docker / alpine作为我们的基本映像。 我们也使用netwokMode: host为我们的容器。 问题来了,我们可以从主机成功运行telnet 10.XXX 9999 ,但是如果我们从容器内部运行相同的命令,它只是挂起,不能连接。

另外,我们在主机(容器运行的地方)启用了net.ipv4.ip_forward ,但在远程机器上禁用了。

不知道可能是什么问题,也许iptables

我花了一天的时间(同时尝试networking模式'桥'和'主机'),它看起来像在ECS内使用busybox的telnet问题 – Alpine的远程login是一个符号连接到busybox。 我不太了解busybox / networking的含义,提出什么是根本原因,但是通过使用其他工具,我能够certificatenetworkingpath是清楚的。

我'去'testing一个networkingpath是使用netcat如下。 “成功”或“失败”消息因版本而异,但拒绝或超时(-w#)非常明显。 所有的netcat在这里都是请求一个套接字 – 它实际上并没有与监听应用程序交谈,所以你需要别的东西来testing它。

 nc -vz -w2 HOST PORT 

我今天的问题是解决一个应用程序的mongo连接。 nc显示的path是清楚的,但telnet与您报告的问题相同。 我结束了安装mongo客户端并检查,我可以正确连接。

如果您需要从ECS容器内部通过telnet实际运行命令,请尝试安装其他Telnet工具,并避免使用busybox内置的工具。