Docker宿主机上的Tomcat 8080端口无法对外


本来要发这个问题问问各位大神的,可是突然想到问题原因了,所以写到一半的问题贴,就变成了解决性质的帖子,希望可以帮助跟我一样菜鸟Docker爱好者吧。

因为特殊要求有个服务需要配置到宿主机上,所以引发了以下这个问题。

实验:
容器中安装Tomcat,映射到宿主机为6666。宿主机中也安装Tomcat,端口为8080。端口使用netstat查看全部开启。

浏览器:访问容器中Tomcat 端口6666 访问成功 telnet 6666端口成功
访问宿主机Tomcat 端口8080 访问失败 telnet 8080端口失败

排错分析:
说明宿主机8080端口对外是关闭的,而又想到宿主机ssh端口22为什么是对外可以通信呢,想到docker宿主机--容器--外网这三点通信都是通过宿主机的iptables nat去做的转换,所以怀疑应该是iptables的问题!

iptables-save > q.txt

cat q.txt

-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
果然在宿主机的规则连中有,插入了开放本机端口的规则。

解决:

cat q.txt

-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT

iptables-restore <q.txt

访问宿主机8080端口成功。
已邀请:

DockOne - DockOne官方账号

赞同来自:


赞,所以我们提倡写问题的时候多些时间,也许在整理问题的时候你的思路就开阔了。

要回复问题请先登录注册