我使用分配的静态IP地址设置了Google Compute Engine(GCE)实例。 我的目标是在该实例上运行托pipe服务器的Docker容器。
我正常启动了Docker容器。 我可以连接使用Lynx从运行在容器内的bash shell(lynx http://0.0.0.0 )。
请理解我不是networking专家。 在阅读了Dockernetworking之后,我在实例(iptables -t nat -L -n)上使用了这个build议的iptables命令,并发现了一个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
然而,我收取前进,并在实例壳(容器外)我运行Lynx连接到该IP地址(172.17.0.7:80),它连接到网站的网站! 我假设它连接到容器。
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容器正在工作,我可以到达它(至less从实例中,通过那个神秘的addr),GCE外部IP地址是如何通过实例连接到该容器的?
它还没有工作。 尝试从我的笔记本电脑浏览器连接到该外部IP,连接到端口80我得到:“此网站无法到达XXX.XXX.XXX.XXX拒绝连接。 连接到端口8080,我得到“这个站点无法到达,XXX.XXX.XXX.XXX花了很长时间回应。
我找不到将使其连接的configuration修复程序。 我可以成功地ping外部地址,所以我知道它是连接到一些东西。 我确定静态IP被分配给了networkingGCE实例。
稍微多一点:早些时候,我安装了另外一个带有类似外部静态IP的Docker容器(Mattermost)的GCE。 外部IP工作! 它通过连接到容器没有搭便车。 我希望同样会是真的。 没有运气。
[编辑:修正了一个错字。]