收到“您是要运行dotnet SDK命令吗?请从以下位置安装dotnet SDK”

时间:2019-05-21 11:35:47

标签: docker dockerfile

我正在尝试将.net MVC应用程序容器化,但是当我运行图像时,却出现如下错误

  

user @ tuser:〜/ sam / WebApp $ docker run -p 8000:80 sam:latest

     

您是要运行dotnet SDK命令吗?请从以下位置安装dotnet SDK:     https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

     

user @ user:〜/ sam / WebApp $

我的Dockerfile看起来像

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
COPY /bin/Release/Publish /app
ENTRYPOINT ["dotnet", "WebApp.dll"]

我要去哪里错了?

1 个答案:

答案 0 :(得分:0)

最新答案,但是很常见,所以我会回答。

如果入口点中的dll定位参数不存在,通常会发生这种情况。如果您要导出,皮重和重新导入资产,还有其他可能性,但这可能不是我们在这里要处理的。

在您的情况下,复制操作指向根相对文件位置。我假设您没有发布到{system root /} bin / Release / Publish,并且您的dockerfile位于项目的根目录中。

要解决此问题,您应该相对于dockerfile所在的目录执行复制操作,并使用目录相对路径(./etc)指定复制操作。

可以通过我的测试工作的示例:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
COPY ./bin/Release/Publish /app
ENTRYPOINT ["dotnet", "WebApi.dll"]

要查看其是否有效,请通过使用cmd覆盖启动来检查生成的容器:

docker run -it --rm sam:latest /bin/sh
...
pwd #ensure workdir is app
ls -la #ensure that your application is copied here

如果您想进行更深入的研究,则可以使用docker run覆盖您的入口点,并尝试使用不同的启动配置来查看输出。您需要的命令如下:

docker run -it --rm --entrypoint {dotnet executable} {image}:{tag} {non-existent dll}

通过在其他可以正常工作的容器上进行覆盖来定位不存在的dll时的输出示例:

➜ docker run -it --rm --entrypoint dotnet sam:latest weebles.dll
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
  https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409