Docker 获得;您的意思是运行dotnetsdk命令吗?请从“安装dotnet SDK”;

Docker 获得;您的意思是运行dotnetsdk命令吗?请从“安装dotnet SDK”;,docker,dockerfile,Docker,Dockerfile,我试图将一个.NETMVC应用程序容器化,但当我运行映像时,会出现如下错误 user@tuser:~/sam/WebApp$docker run-p8000:80 sam:latest 您的意思是运行dotnetsdk命令吗?请从以下位置安装dotnet SDK: user@user:~/sam/WebApp$ 我的Dockerfile看起来像 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app COPY /bin

我试图将一个.NETMVC应用程序容器化,但当我运行映像时,会出现如下错误

user@tuser:~/sam/WebApp$docker run-p8000:80 sam:latest

您的意思是运行dotnetsdk命令吗?请从以下位置安装dotnet SDK:

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

我哪里做错了?

回答晚了,但这个问题很常见,所以我会回答

如果入口点中的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