2017-04-24 104 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的深度不夠,但如果你有你的泊塢窗鏈「之前」正向鏈它使問題