Dot-Net

dotnet aspnetcore docker build 失敗並顯示 145 錯誤程式碼

  • December 1, 2020

我已經使用本教程創建了我的第一個 docker webapi 項目。

我正在使用 Windows 7(泊塢窗工具箱)。

這是我跑過的:

dotnet new webapi

這是 Dockerfile:

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

這就是我創建圖像的方式:

docker build -t mydemos:aspnetcorehelloworld .

這就是我創建和執行容器的方式:

docker run -d -p 8080:5000 -t mydemos:aspnetcorehelloworld

我的服務作為 docker 容器成功執行。

然後,我嘗試更改 Dockerfile 以在 aspnetcore 基礎映像上工作:

FROM microsoft/dotnet:latest改為FROM microsoft/aspnetcore:1.0.1

新的 Dockerfile 看起來像:

FROM microsoft/aspnetcore:1.0.1
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

現在,我嘗試使用

docker build -t mydemos:aspnetcorehelloworld1 .

我得到一個錯誤。
這是建構日誌:

Sending build context to Docker daemon 636.9 kB
Step 1/8 : FROM microsoft/aspnetcore:1.0.1
---> 2c7bbc508bb2
Step 2/8 : COPY . /app
---> Using cache
---> 1d5b9bd908b3
Step 3/8 : WORKDIR /app
---> Using cache
---> c1d5d091d111
Step 4/8 : RUN dotnet restore
---> Running in 8399e21caeb2
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
 http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
The command 'dotnet restore' returned a non-zero code: 145

我進入了網址,重新安裝了東西,但仍然出現錯誤。

我嘗試在同一個命令行會話中使用 dotnet cli 命令並且我成功了(dotnet restore有效)。

我試圖搜尋這個錯誤,但找不到任何解決方案。

我在這裡想念什麼?我在多個場合和測試中都收到了這個 145 錯誤。

您使用的映像僅包含 .NET Core 執行時,而不包含 SDK。嘗試來自以下儲存庫的基本映像:

https://hub.docker.com/r/microsoft/aspnetcore-build/


您的 Dockerfile 中有以下幾行:

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

這意味著dotnet restoreanddotnet build命令正在您正在使用的映像中執行。由於您使用的圖像沒有安裝 SDK,因此無法找到這些命令並且如您所見那樣失敗。我在上面連結的儲存庫中的圖像中安裝了 SDK,因此可以找到並執行dotnet restoreand命令。dotnet build

使用安裝了 SDK 的基礎鏡像的替代方法是在您的開發機器上執行建構/發布過程,然後簡單地將發布的輸出複製到鏡像中。然後,您的 Dockerfile 只需要查看以下內容:

FROM microsoft/aspnetcore:1.0.1
WORKDIR /app
COPY ./app .
ENTRYPOINT ["dotnet", "TheNameOfYourProject.dll"]

請注意,現在dotnet在映像中執行的命令只是執行(預建構的)DLL 的命令。這僅需要執行時,而不需要 SDK。

引用自:https://stackoverflow.com/questions/42346498