簡體   English   中英

Docker 上的 Asp.Net Core

[英]Asp.Net Core on Docker

我目前正在嘗試使用 ASP.NET Core 應用程序啟動 Docker 組件。

我使用以下 repo 進行測試: https : //github.com/aspnet/cli-samples

我運行以下命令沒有任何問題:

git clone https://github.com/aspnet/cli-samples aspnet-Home
cd aspnet-Home/HelloWeb
cat Dockerfile

FROM microsoft/aspnetcore
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "helloweb.dll"]

sudo docker build –t helloweb .
sudo docker run -d helloweb

使用sudo docker images可以看到sudo docker images ,但容器不會啟動,並且使用sudo docker ps不可見:

在此處輸入圖片說明

如果我瀏覽我的網站,顯然我看不到數據。 回購不適合我的測試嗎? 我在 docker 容器創建上有什么錯誤嗎?

運行-it命令給我以下輸出: 在此處輸入圖片說明

你強調的錯誤是因為helloweb.dll你設置為ENTRYPOINT不存在。 可能有兩個原因

1 你還沒有構建項目

在這種情況下,您應該從項目主目錄運行dotnet restore ,然后導航到HelloWeb目錄並運行dotnet publish 當我運行此命令時,我看到以下內容:

publish: Published to /code/HelloWeb/bin/Debug/netcoreapp1.0/publish  
Published 1/1 projects successfully

2 你建了工程,但是ENTRYPOINT路徑不對

COPY . . 指令會將當前目錄中的所有內容復制到您的app目錄中。 這意味着HelloWeb.dll實際上將在bin/Debug/netcoreapp1.0/publish/ (或bin/Release/...對於發布版本)。

選項 1:使用完整路徑修改您的入口點

ENTRYPOINT ["dotnet", "bin/Debug/netcoreapp1.0/publish/HelloWeb.dll"]

您的應用程序應該很高興地啟動並處理請求。

選項 2:修改您的COPY指令

項目發布后,運行它所需的所有內容都將位於publish目錄中。 您可以將其內容復制到/app目錄中,您的入口點將是正確的。 看起來像這樣

FROM microsoft/aspnetcore

WORKDIR /app
COPY ./bin/Debug/netcoreapp1.0/publish/ .

EXPOSE 80

ENTRYPOINT ["dotnet", "HelloWeb.dll"]

您可能還想添加EXPOSE指令來告訴 Docker 您的容器將偵聽端口 80。


成功后,您應該會看到(如果您在交互模式下運行)

docker run -it helloweb   
Hosting environment: Production
Content root path: /app
Now listening on: http://+:80
Application started. Press Ctrl+C to shut down.

您也可以改用microsoft/dotnet:latest圖像。 該映像附帶安裝了 SDK 和一個非常方便的run命令。 Dockerfile 看起來像這樣

FROM microsoft/dotnet:latest

COPY . /app

WORKDIR /app
RUN dotnet restore

ENV ASPNETCORE_URLS http://*:5000
EXPOSE 5000

ENTRYPOINT ["dotnet", "run"]

您應該能夠修改源代碼並構建和運行容器。

暫無
暫無

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

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