2017-09-02 101 views
0

我已經配置了Web服務器以便在Docker容器中運行。這一次,一個不起作用。我的Docker主機正在運行Ubuntu。當其中包含Web服務器應用程序的Docker容器正在運行時,nmap命令會顯示外部IP地址和端口被「過濾」。當Docker容器未運行時,nmap將狀態顯示爲「已關閉」。這完全不是我所期望的。如何讓Web服務器從Docker容器正常工作?

無論Docker容器是否正在運行,Web瀏覽器都會顯示「連接已重置」。考慮到我所看到的nmap結果,這並不令人驚訝。

在支持Web服務的Docker容器中我通常可以運行apt-get update和其他apt-get install命令。但我不能用這個問題容器。我得到「無法解決'deb.debian.org'。」我不確定這是否相關。我嘗試用8.8.8.8和8.8.4.4配置文件/etc/docker/daemon.json。這個文件似乎沒有做任何事情。我嘗試重新啓動Docker服務器。

我在Docker服務器上禁用了IP版本6。我可以禁用防火牆。爲什麼將Docker容器配置爲使用端口會導致nmap命令顯示端口在Docker容器運行時被過濾?

我正在使用AWS服務器。 resolv.conf中未被註釋掉的內容是:

nameserver 172.31.0.2 
search us-east-2.compute.internal 

更新/編輯。爲了迴應以前的評論,我想在這裏發佈格式更好的信息。

捲曲ipinfo.io顯示了這個(但我替換XXXX的IP地址)

{ 
    "ip": "x.x.x.x", 
    "hostname": "ec2-x-x-x-x.us-east-2.compute.amazonaws.com", 
    "city": "Columbus", 
    "region": "Ohio", 
    "country": "US", 
    "loc": "39.9653,-83.0235", 
    "org": "AS16509 Amazon.com, Inc.", 
    "postal": "43215" 
} 

須藤的iptables -S顯示了這個(但我換成XX的IP地址的最後兩個字節)

-P INPUT ACCEPT 
-P FORWARD ACCEPT 
-P OUTPUT ACCEPT 
-N DOCKER 
-N DOCKER-ISOLATION 
-A FORWARD -j DOCKER-ISOLATION 
-A FORWARD -o br-5d57542faf97 -j DOCKER 
-A FORWARD -o br-5d57542faf97 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i br-5d57542faf97 ! -o br-5d57542faf97 -j ACCEPT 
-A FORWARD -i br-5d57542faf97 -o br-5d57542faf97 -j ACCEPT 
-A FORWARD -o docker0 -j DOCKER 
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT 
-A FORWARD -i docker0 -o docker0 -j ACCEPT 
-A DOCKER -d 172.31.x.x/32 ! -i br-5d57542faf97 -o br-5d57542faf97 -p tcp -m tcp --dport 80 -j ACCEPT 
-A DOCKER-ISOLATION -i docker0 -o br-5d57542faf97 -j DROP 
-A DOCKER-ISOLATION -i br-5d57542faf97 -o docker0 -j DROP 
-A DOCKER-ISOLATION -j RETURN 

更新/澄清: 我用這樣的命令來創建多克爾容器:

sudo的碼頭工人運行--name碼頭工人,nginx的-p 7777:80 - -network = isolated_nw --ip 172.31.x.x nginx

我創建了一個名爲isolated_nw的用戶定義網絡。當我在RedHat服務器上執行此操作時,我沒有任何問題。當Docker主機運行Ubuntu時,那是我遇到問題時。我應該將這個問題轉到Ubuntu論壇上嗎?

另一個更新:這主要是一個網絡問題(因爲Web服務不工作)。 nmap命令的結果顯示,當Docker容器運行時應該過濾該端口,該端口應該在該端口上偵聽。在RedHat Docker主機上,apt-get命令無法從公共存儲庫包中檢索,如普通的Docker容器。這個命令journalctl -u docker.service沒有告訴我任何明顯的問題,我的網絡問題。

我參加了獲取.deb包以複製到Docker容器以安裝netstat的工作。然後我跑這個命令:

netstat -plnat 

我看到這一點:

Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 

tcp  0  0 0.0.0.0:80    0.0.0.0:* LISTEN  1/nginx: master pro 
tcp  0  0 127.0.0.11:44720  0.0.0.0:* LISTEN  - 
+0

您是否擁有企業DNS? 'cat/etc/resolv.conf' –

+0

不,它不是公司的DNS。但它是一個AWS實例。我通過編輯主文章完全回答了這個問題。請參閱主文章的最後兩行以獲得答案。 – Victor

+0

你能檢查ufw是否啓用?如果是這樣,請嘗試禁用它。你也可以嘗試使用'--net = host'運行容器。 –

回答

0

這可能是DNS設置問題,那麼。

創建一個文件/etc/docker/daemon.json下面內容

{ 
    "dns": ["172.31.0.2"], 
    "dns-search": ["us-east-2.compute.internal"] 
} 

然後重新啓動泊塢窗服務。這將爲您啓動的每個容器設置容器DNS

+0

不幸的是,這沒有奏效;問題沒有解決。我仍然無法在Docker容器中運行apt-get更新。每當Docker容器啓動時,nmap命令將顯示連接過濾到Docker容器偵聽的端口。 – Victor

+0

你使用VPC嗎?還有一個互聯網網關嗎?你能夠使用你的機器上的'curl ipinfo.io'嗎?你可以添加'iptables -S'的輸出到你的問題 –

+0

不,我沒有使用VPC。我可以上網。但是當我使用「ifconfig」或「ip addr show」時,我看不到任何Internet網關。其他兩個問題將在主帖中顯示。由於在此評論框中格式化,我將對其進行編輯。 – Victor