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的接口