dotnet aspnetcore docker生成失败,错误代码为145

我已经使用这个教程来创build我的第一个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"] 

这是我如何创build图像:

 docker build -t mydemos:aspnetcorehelloworld . 

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

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

现在,我试图使用新build图像

 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 

我进入url,重新安装的东西,我仍然得到一个错误。
我试图在同一个命令行会话中使用dotnet cli命令,并成功( dotnet restore工作)。

我试图search这个错误,但无法find任何解决scheme。

我在这里错过了什么? 我在多次场合和testing中得到这个145错误。

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

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


你的Dockerfile中有以下几行:

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

这意味着dotnet restoredotnet build命令正在您使用的图像中运行。 由于您正在使用的图像没有安装SDK,所以无法find这些命令,并且看起来失败。 上面链接的存储库中的图像中安装了SDK,因此可以find并执行dotnet restoredotnet build命令。

使用安装了SDK的基本映像的替代方法是在开发机器上执行构build/发布过程,然后将发布的输出复制到映像中。 你的Dockerfile只需要看下面的内容:

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

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