问题:
服务器域名是 www.test.com,使用 docker run -p 8023:80 ...
成功启动容器,未报任何错误,浏览器输入 www.test.com:8023无法访问容器内部的web服务
解决步骤:
1、iptbles开启8023端口
结果:仍然无法访问
2、进入容器内部,查询容器ip是172.17.0.2,在服务器使用 wget http://172.17.0.2 能正常访问,但是访问速度很慢
结果:容器正常工作,判断应该是iptables的问题
3、cat /etc/sysconfig/iptables查看iptables配置文件如下
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8023 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
COMMIT
原来是缺少nat规则,在配置文件里面添加nat配置规则
*nat
:PREROUTING ACCEPT [31:1396]
:INPUT ACCEPT [8:464]
:OUTPUT ACCEPT [79:4934]
:POSTROUTING ACCEPT [79:4934]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
COMMIT
4、新增映射端口
iptables -t nat -A DOCKER ! -i br0 -p tcp -m tcp --dport 8023 -j DNAT --to-destination 172.17.0.2:80
5、重启iptables service iptables restart
6、浏览器正常访问 www.test.com:8023,问题解决
网友评论