当前位置: 首页 > 面试题库 >

dotnet aspnetcore docker构建失败并显示145错误代码

羊慈
2023-03-14
问题内容

我已使用本教程创建了我的第一个docker webapi项目。

我正在使用Windows 7(Docker工具箱)。

这是我跑过的:

dotnet new webapi

这是Dockerfile:

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

这是我创建图像的方式:

docker build -t mydemos:aspnetcorehelloworld .

这就是我创建和运行容器的方式:

docker run -d -p 8080:5000 -t mydemos:aspnetcorehelloworld

我的服务作为docker容器成功运行。

然后,我尝试更改Dockerfile以在aspnetcore基本映像上工作:

FROM microsoft/dotnet:latest 改为 FROM microsoft/aspnetcore:1.0.1

新的Dockerfile如下所示:

FROM microsoft/aspnetcore:1.0.1
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

现在,我尝试使用

docker build -t mydemos:aspnetcorehelloworld1 .

我得到一个错误。
这是构建日志:

Sending build context to Docker daemon 636.9 kB
Step 1/8 : FROM microsoft/aspnetcore:1.0.1
 ---> 2c7bbc508bb2
Step 2/8 : COPY . /app
 ---> Using cache
 ---> 1d5b9bd908b3
Step 3/8 : WORKDIR /app
 ---> Using cache
 ---> c1d5d091d111
Step 4/8 : RUN dotnet restore
 ---> Running in 8399e21caeb2
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
  http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
The command 'dotnet restore' returned a non-zero code: 145

我进入了网址,重新安装了东西,但仍然出现错误。
我试图在同一命令行会话中使用dotnet cli命令,但我成功了(dotnet restore可行)。

我曾尝试搜索此错误,但实际上找不到任何解决方案。

我在这里想念什么?我在多个场合和测试中都遇到了145错误。


问题答案:

您使用的映像仅包含.NET Core运行时,而不包含SDK。尝试来自以下存储库的基本映像:

https://hub.docker.com/r/microsoft/aspnetcore-
build/

您的Dockerfile中包含以下几行:

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

这意味着dotnet restoreand dotnet build命令正在您使用的映像中运行。由于您使用的映像未安装SDK,因此您找不到这些命令,这些命令将失败。我在上面链接的存储库中的映像已在其中安装了SDK,因此可以找到和执行dotnet restoredotnet build命令。

使用安装了SDK的基本映像的替代方法是在开发计算机上执行构建/发布过程,然后将发布的输出复制到映像中。然后,您的Dockerfile只需要看起来类似以下内容:

FROM microsoft/aspnetcore:1.0.1
WORKDIR /app
COPY ./app .
ENTRYPOINT ["dotnet", "TheNameOfYourProject.dll"]

请注意,现在dotnet在映像中运行的命令只是运行您(预构建的)DLL的命令。这仅需要运行时,而不需要SDK。



 类似资料:
  • 我已经从AOSP成功同步了Android7.1.2_r11的源代码。现在,我在尝试构建源代码时收到以下错误。任何人都可以告诉我如何修复它,并完成一个成功的构建?提前致谢。 有关详细的构建错误,请参阅附加的屏幕截图。 顺便说一句,我的ubuntu版本是16.04。OpenJDK版本是1.8。 屏幕上显示程序运行的图片 错误日志: 与杰克服务器的通信错误(56)。尝试“杰克诊断”忍者:构建停止:子命令

  • 我有一个多项目gradle构建,Spring Boot按照默认gradle约定进行结构化。 我目前的项目是(A)将gradle从5. x升级到7.3. x,(B)使用带有Spring Boot的嵌入式Tomcat。 这是一个已经存在很多年的项目,是Spring Boot,但是传统上一直作为一个战争文件部署在Tomcat中。 我已经按照gradle迁移指南将gradle升级到7.3.3,并正确构建了

  • 为什么我会出现以下错误?突然,它开始出现这个错误。 失败:生成失败,出现异常。 > 其中:脚本'C:\src\flutter\package\flutter_tools\gradle\flutter.gradle'行:1070 错误:任务:app:compileFlutterBuildDebug的执行失败。 处理“命令”C:\src\flatter\bin\flatter。bat“”以非零退出值1

  • 问题内容: 我正在使用React Native开发一个简单的应用程序。我正在Android设备上对其进行测试。我创建了一个Node.js服务器来监听请求,该服务器运行在http:// localhost:3333 /上 。接下来,我要从index.android.js进行提取请求。下面是代码。 节点服务器上请求处理程序的代码如下 但是,获取请求无效。我在Chrome控制台中收到的错误是:TypeE

  • 我试图为android构建一个离子应用程序,但我遇到了这个错误: 我试图更新科尔多瓦和科尔多瓦-CLI,但没有工作。

  • 问题内容: 我收到此错误: 我正在使用Tomcat 6作为Web服务器。我有两个HTTPS Web应用程序安装在不同端口上但在同一台机器上的不同Tomcat上。说App1(port 8443)和 App2(port 443)。App1连接到App2。当App1连接到App2我得到以上错误。我知道这是一个非常常见的错误,因此在不同的论坛和站点上遇到了许多解决方案。我在server.xml两个Tomc