1

我正在創建一個簡單的dotnetcore 2.0應用程序,並且我想對它進行容器化。作爲這個容器的想法將在部署時運行一次,以執行一些應用程序配置任務。啓動時出現Dotnetcore容器錯誤詢問我是否需要運行SDK命令

目前,代碼只是做到這一點...

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Hello World!"); 
    } 
} 

泊塢窗文件看起來像這樣...

FROM microsoft/dotnet:2.0-runtime 
ARG source 
WORKDIR /app 
COPY ${source:-obj/Docker/publish} . 
ENTRYPOINT ["dotnet", "consoleapp.dll"] 

我打了F5在Visual Studio 2017年,我可以看到執行該容器存在的命令docker image ls

然後我嘗試按以下方式運行容器:

docker run consoleapp: dev

我現在得到的錯誤:

Did you mean to run dotnet SDK commands? Please install dotnet SDK from: 
    http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409 

我對這個問題的想法是,因爲我使用一個運行時圖像根據我的形象,我應該可以以某種方式開始我的申請。我猜這裏的錯誤是dotnet,它構成了我的入口點的一部分,是dotnet SDK的一部分,因此不在我的基本映像中。

我應該將此容器基於一個非運行時版本的dotnet核心嗎?

回答

0

爲什麼你可以看到這個錯誤信息的一個原因是傳遞給dotnet的參數未知。

runtime無法識別您傳遞給它的參數,並懷疑您是否應該使用sdk來代替。

確保DLL的名稱和路徑,它是正確的:

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

此外,確保COPY指令按預期工作。

在你的例子中,它從obj/Docker/publish文件夾中選取文件。準備執行的輸出應該來自bin文件夾。 如果您使用發佈的版本,請確保在創建容器之前運行dotnet publish。或者在創建圖像時恢復/構建/發佈。

請記住,DLL將不得不完全在WORKDIR。你的情況:/應用 除非你提供的路徑,dotnet

我創建了一個basic working sample on Github

0

創建一個應用程序:

dotnet new console -o myApp 
cd myApp/ 
dotnet publish -o publish -r linux-x64 
# add docker file (see below) 
docker build . -t myapp:latest 
docker run --rm myapp:latest 

Dockerfile:

FROM microsoft/dotnet:2-runtime 
WORKDIR /opt/myapp 
ADD publish . 
ENV PATH="/opt/myapp:${PATH}" 
CMD ["myApp"] 
相關問題