2017-04-24 126 views
0

我是新来的docker,我有问题让nginx运行。这一切似乎都是正确的。使用“curl”可以从主机访问nginx。 iptables为docker虚拟接口设置了一个新的规则。nginx docker-image无法访问

但是,互联网上无法访问nginx。

我使用的是Debian(杰西)

Linux h2127057 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux 

泊坞窗是版本

Docker version 17.03.1-ce, build c6d412e 

netstat的是给

Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  
tcp  0  0 0.0.0.0:514    0.0.0.0:*    LISTEN  
tcp  0 216 X.X.X.X:22    X.X.X.X:64103  VERBUNDEN 
tcp6  0  0 :::443     :::*     LISTEN  
tcp6  0  0 :::514     :::*     LISTEN  
tcp6  0  0 :::80     :::*     LISTEN  

iptables规则的遵循

-P INPUT ACCEPT 
-P FORWARD ACCEPT 
-P OUTPUT ACCEPT 
-N DOCKER 
-N DOCKER-ISOLATION 
-N fail2ban-pam-generic 
-N fail2ban-ssh 
-N fail2ban-ssh-ddos 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 25 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 465 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 587 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 110 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 995 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 143 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 993 -j ACCEPT 
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT 
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT 

正如你所看到的,在另一个子网上已经有规则。这是我使用普通LXC的旧虚拟基础架构。

这可以让我得到问题吗?

谢谢大家帮助 大卫

+0

但是,如果您的应用程序在主机上,特定端口上可见,那么您只需将此端口(在主机上)打开到全世界,并最终将域添加到etc/hosts也是如此。国际海事组织没有什么更多与码头本身。 – barat

+0

这里是我如何暴露端口到机器 '码头运行-d -p 80:80 -p 443:443 nginx' – David

+0

所以现在看来​​你有某种路由器/防火墙/无论什么阻塞传入端口80/443从互联网到您的主机的交通。 您需要搜索指南如何打开OS /路由器上的端口。如果在主机上看到nginx服务页面,则转到localhost:80,然后在打开端口之后,它将从YOUREXTERNALIP:80(或somedomain.tld,如果将其添加到您的etc/hosts(如127.0.0)中)访问。1 somedomain.tld) – barat

回答

0

好吧,让我们来第一个结论:

我有运行LXC容器内的网络服务器和使用端口转发的iptables没有问题。一切正常。伟大的工作!

如果我尝试与docker相同,即使iptables设置正确并且docker正在公开端口,webserver也无法从外部访问。不工作!

停止所有容器(LXC和docker)并运行裸机网络服务器时,需要在iptables中指定一个指向外部IP地址的规则。它会从互联网上到达。

那么为什么一切正常,除了docker-nginx-image?

很奇怪:-(

编辑: 好吧,我有吧!!全部遇难LXC和泊坞窗容器冲洗iptables和停止的fail2ban后!!所有的工作,因为它应该就算开始的fail2ban后所有...

这意味着我:让泊坞窗为您管理所有的iptables规则我不是iptables的深度不够,但如果你有你的泊坞窗链“之前”正向链它使问题