當Web應用程序在Docker中進行集裝箱化後,我無法讓我的ASP.NET Web應用程序獲取到我的瀏覽器。Docker上的ASP.NET無法將Web應用程序服務到瀏覽器
我正在運行Mac,並且我使用Visual Studio代碼創建了一個ASP.NET Web應用程序。這是一個基於yo aspnet
「空應用」的簡單,現成的演示。當運行「本機」(Docker之外)時,此應用程序提供「Hello World!」到http://localhost:5000就好了。換句話說,運行dnx web
啓動Web服務器(紅隼)和yeilds:
Hosting environment: Production
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
這是一件好事。現在進入Docker。我似乎已經成功構建了一個包含Web應用程序的Docker鏡像,當我在Docker中運行容器時,我從Kestrel獲得相同的輸出。還不錯,但是,我不能再加載「Hello World!」在我的瀏覽器頁面http://localhost:5000。相反,我得到一個ERR_CONNECTION_REFUSED
。這很明顯,因爲由於Docker「間接」,沒有任何東西直接爲端口5000提供服務。換句話說,我認爲存在不正確的轉發配置,或者我認爲是誤解了尋址。
我相信端口轉發涉及這個過程。在我Dockerfile,我使用的是EXPOSE 5000
我本以爲這允許我用這樣的運行命令我本地使用的端口號爲5000的映射到多克爾集裝箱港口5000:
docker run -i -t -p 5000:5000 container_name
但是,這不是與http://localhost:5000的情況下(ERR_CONNECTION_REFUSED
)。所以我發現Docker幾乎肯定不在localhost
。當多克的負載,它說我已經注意到:
docker is configured to use the default machine with IP 192.168.99.100
所以,我想我會嘗試http://192.168.99.100:5000,但同樣(容易混淆?)ERR_CONNECTION_REFUSED
。接下來,我讀到一篇有趣的文章here,我能夠從建議的命令
docker inspect container_name | grep IPAddress
該容器被分配"IPAddress": "172.17.0.2"
那麼確定,我想我會嘗試http://172.17.0.2:5000。而現在我們可能實際上正在某個地方,因爲我沒有使用ERR_CONNECTION_REFUSED
,而是得到一個旋轉的沙漏和由此產生的超時。但仍然沒有「Hello World!」
我可能會丟失什麼?
你可以發佈「碼頭端口」或你的容器嗎? – user2915097
ASP是否正在運行並在容器中偵聽? – Auzias
由於帶寬問題,我目前在將圖像上傳到Docker Hub時遇到問題。在回答第二個問題時,是的,Kestrel網絡服務器報告它正在運行並正在偵聽端口5000. – robbpriestley