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

标签 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 核心的非运行时版本吗?

最佳答案

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

运行时无法识别您传递给它的参数,并想知道您是否应该使用sdk

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

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

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

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

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

的路径

我创建了一个 basic working sample on Github :

关于docker - Dotnetcore 容器启动时出现错误,询问我是否要运行 SDK 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654574/

相关文章:

c# - 在不显式使用特定类的情况下传递实现接口(interface)的对象

java - 在 tomcat docker 容器中部署 Java 应用程序

mysql - 有没有办法检查 dump mysql import 的加载状态?

authentication - UseJwtBearerAuthentication 没有填充 User.Identity.Name

c# - 在 MVC Core 应用程序中使用 AddAzureADB2C 时向 ClaimsPrincipal 添加自定义声明

c# - 为什么我在上传较大文件时出现 CORS 错误?

symfony - Docker-symfony:file_get_contents无法打开流:无效参数

postgresql - PGAdmin 使用每个 "docker-compose up"创建新的随机卷

javascript - asp.net core 2.0编译webpack-Cli依赖报错

visual-studio - 通过 visual studio 2017 中的 postbuild 事件构建 .net 核心项目