Docker 获得;您的意思是运行dotnetsdk命令吗?请从“安装dotnet SDK”;
我试图将一个.NETMVC应用程序容器化,但当我运行映像时,会出现如下错误 user@tuser:~/sam/WebApp$docker run-p8000:80 sam:latest 您的意思是运行dotnetsdk命令吗?请从以下位置安装dotnet SDK: user@user:~/sam/WebApp$ 我的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
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