无法获取 GCE 上的外部静态 IP 来连接实例上的 Docker 容器

无法获取 GCE 上的外部静态 IP 来连接实例上的 Docker 容器

我设置了一个 Google Compute Engine (GCE) 实例,并为其分配了静态 IP 地址。我的目标是在该实例上运行 osticket 的 Docker 容器。

我正常启动了 Docker 容器。我可以使用 Lynx 从容器内运行的 bash shell 进行连接(lynxhttp://0.0.0.0)。

请理解我不是网络专家。在阅读了有关 Docker 网络的资料后,我在实例上使用了这个建议的 iptables 命令 (iptables -t nat -L -n),发现了一个 IP 地址 (172.17.0.7),但其用途对我来说是个谜:

Chain DOCKER (2 references) 
target  prot opt source        destination
DNAT    tcp  --  0.0.0.0/0     0.0.0.0/0      tcp dpt:8080 to:172.17.0.7:80

但是,我继续前进,在实例 shell 中(容器外部),我运行了 Lynx 并连接到该 IP 地址(172.17.0.7:80),然后它连接到了 osticket 网站!我假设它连接到了容器。

iptables 的完整输出为:

Chain PREROUTING (policy ACCEPT) 
target     prot opt source      destination
DOCKER     all  --  0.0.0.0/0   0.0.0.0/0        ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT) 
target     prot opt source      destination         

Chain OUTPUT (policy ACCEPT) 
target     prot opt source       destination
DOCKER     all  --  0.0.0.0/0    !127.0.0.0/8   ADDRTYPE match dst-type LOCAL 

Chain POSTROUTING (policy ACCEPT) 
target     prot opt source           destination  
MASQUERADE all  --  172.17.0.0/16    0.0.0.0/0           
MASQUERADE tcp  --  172.17.0.7       172.17.0.7     tcp dpt:80

Chain DOCKER (2 references) 
target     prot opt source           destination          
DNAT       tcp  --  0.0.0.0/0        0.0.0.0/0      tcp dpt:8080 to:172.17.0.7:80

我的问题是:

现在我知道 docker 容器正在运行,而且我可以访问它(至少从实例内部并通过那个神秘的地址),那么 GCE 外部 IP 地址应该如何通过实例连接到该容器呢?

它还不能正常工作。尝试从我的笔记本电脑浏览器连接到该外部 IP,连接到端口 80 时,我收到:“无法访问此站点。XXX.XXX.XXX.XXX 拒绝连接。”连接到端口 8080 时,我收到“无法访问此站点。XXX.XXX.XXX.XXX 响应时间过长。”

我找不到可以使其连接的配置修复程序。我可以成功 ping 该外部地址,所以我知道它正在连接到某个东西。我确信静态 IP 已分配给 osticket GCE 实例。

补充一点:之前,我安装了另一个 GCE,其中包含一个 Docker 容器(Mattermost),该容器具有类似的外部静态 IP。外部 IP 起作用了!它顺利连接到容器。我希望再次出现同样的情况。没有运气。

[编辑:修正了一个错字。]

答案1

您需要在以下位置创建防火墙规则https://console.cloud.google.com/networking/firewalls/list打开端口 80 以允许外部流量入站。

相关内容