请在Chrome、Firefox、IE8+等现代浏览器浏览本站。 本博客所有文章为原创,图片不加水印,随意转载,但请注明来源,谢谢!

Docker容器中无法通过主机公网IP访问其他端口业务解决方法

服务器 kxjhwbb 6430℃ 0评论

Docker的网络结构感觉很复杂很玄学,不做过多讨论。

最近有一个需求是要在容器内访问另一个容器对外开放的端口,例如建立了一个nginx, 参数-p 80:80。

你会发现在docker母机上直接 curl <母机外网IP>,是可以访问的,但如果是在某个容器里,curl <母机外网IP>,却会提示no route

因为用的是centos7,自带了firewalld,尝试了firewall-cmd –zone=public –add-port=80/tcp,发现可以在容器内curl了。

但是如果我的需求是更加特殊的,要求随便哪个端口都可以呢(本来就应该可以,我都直接对外网开放访问的端口,为何在可以访问外网的容器内反而无法访问?)

后继续研究测试发现是-A INPUT -j REJECT --reject-with icmp-host-prohibited的问题,修改为-A INPUT -i enp1s0f0 -j REJECT --reject-with icmp-host-prohibited之后解决。

注意的是,这里的enp1s0f0修改成你自己ifconfig展示结果内有对外IP的接口

喜欢 (7)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址