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

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

2个回答

4

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

runtime 不能识别您传递给它的参数,并想知道您是否应该使用 sdk

请确保以下内容中的 dll 名称和路径正确:

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

另外,请确保COPY指令按预期工作。
在您的示例中,它正在从obj/Docker/publish文件夹中获取文件。准备执行的输出应该来自于bin文件夹。 如果您使用发布版本,请确保在创建容器之前运行dotnet publish。或在创建映像时进行还原/构建/发布操作。
请记住,dll必须恰好结束于WORKDIR。在您的情况下:/app 除非您提供到dotnet的路径。
我已经在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"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接