外部无法访问docker映射的端口

问题:
服务器域名是 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,问题解决

你可能感兴趣的:(外部无法访问docker映射的端口)