docker - 获取“您的意思是运行 dotnet SDK 命令吗?请从以下位置安装 dotnet SDK”
问题描述
我正在尝试将 .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
用户@用户:~/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
推荐阅读
- javascript - 如何使用 orgChart 添加孩子?
- java - 升级到新的 Jenkins 版本后,构建失败
- javascript - react window.onload上的浏览器兼容性问题?
- java - JAX-RS中POST请求中对象内的映射集合
- java - 有什么方法可以猜测 MD5 hashkey 生成的值吗?
- symfony - Symfony 4:未捕获的 RuntimeException:未定义 APP_ENV 环境变量
- angular - Angular 5 表过滤
- java - AtomicInteger 设置方法是 Atomic 吗?
- c - 如何在另一个函数中更改字符串指针数组?
- extjs - 在 Ext.ajax 请求上添加异常 Ext JS 6