簡體   English   中英

帶Docker的Windows容器:無法從主機到達容器中的httpd(Win2016 TP5)

[英]Windows Container with Docker: Cannot reach httpd in container from host (Win2016 TP5)

我有一台Windows Server 2016 TP5機器,我用它作為容器主機。

我有一個運行的Windows容器 ,我使用Docker管理 在這個容器里面,我有一個在端口88上運行的Apache httpd。

啟動容器時的端口映射是: 0.0.0.0:80->88/tcp :80-> 88 / 0.0.0.0:80->88/tcp ,因此我將容器主機的端口80映射到容器的端口88。 這是docker inspect的輸出: http//pastebin.com/AVem1eGV

我現在可以通過DNS或IP從網絡中的任何其他計算機訪問Apache http起始頁面。

就我而言:

但是當我嘗試從主機系統本身或從容器內部調用相同內容時同樣不起作用 因此,在主機系統上,我嘗試通過瀏覽器或wget訪問相同的URL,並獲取:

C:\> wget -UseBasicParsing http://documents.test2016-3.company.com/
wget : Unable to connect to the remote server

在這兩種情況下。

但我可以從主機本身以及容器中ping主機。

來自主持人:

C:\>ping test2016-3.company.com    
Ping wird ausgeführt für TEST2016-3.company.com [fe80::847a:1430:8a10:b120%4] mit 32 Bytes Daten:

從容器:

PS C:\> ping documents.test2016-3.company.com
Pinging documents.test2016-3.company.com [10.10.1.162] with 32 bytes of data:

這似乎能夠很好地解決這個名字。

這是什么工作 ,雖然是直接(不通過端口映射)調用通過容器的主機端口運行Apache的默認頁面(這是雙贏的de6u4068naf)和,無論是從主機以及容器內:

HTTP://共贏de6u4068naf:88 /

只是從主機或容器本身通過容器主機主機名和映射端口的路徑不能正常工作!

防火牆規則允許來自任何遠程地址或端口80的端口80上的所有內容(=入站和出站規則都設置為“允許”為“任何”)。

我知道Microsoft / Docker將容器/ docker支持的網絡代碼庫從Windows Server 2016 TP4更改為TP5。 不確定這是否相關,或者這是一個錯誤還是我還沒有正確配置。

我做了一個測試,並將Docker / Container從上面的圖片中刪除,並在端口80上的容器主機系統上安裝了一個普通的Apache httpd(並且根本沒有運行Docker),只是為了檢查這樣的設置是否有效,以便確保它實際上與Docker / Container有關,而不是我的網絡/主機配置問題。 這工作正常,我可以從外部以及從主機本身到達Apache,因此它必須是與Docker / Container相關的問題。

環境:

  • Windows Server 2016 TP5
  • Docker版本1.12.0-dev,build 2b97201

得到了對微軟的Github的回復:

https://github.com/Microsoft/Virtualization-Documentation/issues/253#issuecomment-217975932

這是我們的Windows NAT實現(WinNAT)中的一個已知限制,您無法直接從容器(NAT)主機訪問靜態端口映射中的外部端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM