我在同一个私有子网内创建了两个 EC2 实例(我们将它们称为客户端和远程主机),并且在远程主机内启动了一个 Docker 容器。
docker 容器本身是docker网络的一部分,其IP为“192.168.125.2”。
我在这个容器内启动了一个sshd服务器,并将22号端口映射到2201,分别在容器内部和外部。
这是我的问题:如果我尝试从客户端主机使用我的公共 IP 访问 docker 容器内部的 ssh,如下所示:
ssh -p 2201 username@PUBLIC_IP
然后,尽管需要很长时间,我还是可以通过 ssh 进入远程主机中的容器。
但是,如果我尝试使用私有 IP 从客户端主机 ssh 连接容器
ssh -p 2201 username@PUBLIC_IP
我收到超时错误,无法访问 docker 容器。
我应该补充一点,如果我尝试从本地主机 ssh 远程主机(不访问 docker 容器),如下所示:
ssh -p 22 username@PRIVATE_IP
然后我就可以毫无问题地进行 ssh 了。
这里可能存在什么问题?如何使用私有 IP 地址从客户端 ssh 到远程主机中的容器?
我已经添加了入站规则以允许来自任何来源的端口 2201 和 2202 的流量,禁用源/目标 IP 检查,但仍然没有效果。
谢谢。
更新 1:
以下是docker port <container_name>
5672/tcp -> 0.0.0.0:5672
7777/tcp -> 0.0.0.0:7777
22/tcp -> 0.0.0.0:2201
答案1
我建议首先在安全组中启用 icmp 流量,然后尝试从客户端 ping 到远程 IP 地址。大多数情况下它不起作用,现在在 ICMP 规则中添加源 IP 作为“<>”的名称。这将启用属于该安全组的 EC2 之间的访问。如果有效,则同样在 2201 规则和 22 规则中添加源 IP 作为“<>”的名称。然后尝试 ssh 看看它是否有效