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

时间:2017-10-09 20:36:56

标签: docker asp.net-core .net-core asp.net-core-2.0 docker-for-windows

我正在创建一个简单的dotnetcore 2.0应用程序,我想将其容器化。作为此容器的想法将在部署时运行一次以执行一些应用程序配置任务。

目前,代码只是这样做......

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

docker文件看起来像这样......

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

我在Visual Studio 2017中点击F5,我可以通过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核心上吗?

2 个答案:

答案 0 :(得分:2)

您可以看到此错误消息的一个原因是传递给dotnet的参数未知。

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

确保dll的名称及其路径正确无误:

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

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

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

请记住,dll必须完全位于WORKDIR。在你的情况下:/ app 除非您提供dotnet

的路径

我创建了basic working sample on Github

答案 1 :(得分: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"]