我正在尝试将.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"]
我要去哪里错了?
答案 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