启动时出现Dotnetcore容器错误询问我是否需要运行SDK命令

问题描述:

我正在创建一个简单的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核心吗?

为什么你可以看到这个错误信息的一个原因是传递给dotnet的参数未知。

runtime无法识别您传递给它的参数,并怀疑您是否应该使用sdk来代替。

确保DLL的名称和路径,它是正确的:

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

此外,确保COPY指令按预期工作。

在你的例子中,它从obj/Docker/publish文件夹中选取文件。准备执行的输出应该来自bin文件夹。 如果您使用发布的版本,请确保在创建容器之前运行dotnet publish。或者在创建图像时恢复/构建/发布。

请记住,DLL将不得不完全在WORKDIR。你的情况:/应用 除非你提供的路径,dotnet

我创建了一个basic working sample on Github

创建一个应用程序:

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"]