2017-07-19 55 views
0

單挑:我是通用Web管理和Docker的新手。我的錯誤可能是是由非常愚蠢的東西造成的。無法從Windows Server 2016主機到達Docker上的Apache

我正在運行Docker for Windows Server 2016(本機變種)。我已經用Nano Server和Apache 2.4(nanoserver/apache24)構建了一個簡單的Docker基礎鏡像。我從這個映像中創建了一個容器,並將容器端口80映射到本地端口8082.

從容器內部,我可以使用Invoke-WebRequest -uri http://localhost:80並檢索默認的apache文檔。但是,我也希望Invoke-WebRequest -uri http://localhost:8082以外的容器檢索相同的文件。這不起作用。我也嘗試使用容器NAT地址,運行Invoke-WebRequest -uri http://172.23.58.7:8082。這也不起作用。我在這裏配置錯了什麼?

從我下面的流程截圖。 PowerShell在主機左側,PowerShell在右側的容器內。

Screenshot of my errors

編輯:@Grimmy問我在註釋部分,我是否確實有EXPOSE 80我Dockerfile是否docker ps命令顯示我與預期端口映射容器。兩方面都是肯定的。我的容器以參數-d -it運行,因爲這是對容器在啓動後立即退出的問題的快速Google修復。我知道-i「保持STDIN開放」和-t「分配僞tty」,但我坦率地不明白這些暗示或它是否可能與問題有關。

EDIT2:我沒有明確在原崗位提到這一點,但值得一提的是,netstat -a -o顯示一個PID監聽端口8082我希望這是事實。應該是這樣嗎?

輸出的前50行左右會顯示在屏幕截圖中。

+0

您是否嘗試過運行'docker ps'並確保容器正在運行?如果是,用'docker exec -it container_id some_command'連接到shell。 – Serey

+0

是的。我的屏幕截圖右側的窗口來自容器內的powershell.exe。從那裏,我可以檢索沒有問題的Apache網頁。 – Magnus

+1

你的'Dockerfile'裏面還有'EXPOSE 80'嗎? – Grimmy

回答

0

我從「artisticcheese」 in the Docker Forums.

答案您無法連接到容器主機本身內映射IP地址。它是WinNAT的Windows實現中的錯誤。您需要獲取專用IP地址的IP地址,並使用端口號連接到該地址。或者您可以通過公共映射端口從同一個 網絡上的其他主機進行訪問,即可工作。

我從另一臺主機連接,它立即工作。坦率地說,我不知道容器的「私人IP地址」是什麼,而不是NAT地址,所以我無法繼續處理另一個提示。

相關問題