.net - dotnet aspnetcore docker build 失败并显示 145 错误

我用过this tutorial创建我的第一个 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

我进入了网址,重新安装了一些东西,但仍然出现错误。
我尝试在同一个命令行 session 中使用 dotnet cli 命令并且我成功了(dotnet restore 有效)。

我试图搜索这个错误,但找不到任何解决方案。

我在这里缺少什么?我在多个场合和测试中都收到此 145 错误。

最佳答案

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

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


您的 Dockerfile 中有以下几行:

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

这意味着 dotnet restoredotnet 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。

关于.net - dotnet aspnetcore docker build 失败并显示 145 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346498/

相关文章:

apache-spark - 如何在 Docker 上运行 Spark?

docker - s3fs 无法安装在 docker 容器内吗?

docker - 如何在 Docker 中将主机文件夹与容器文件夹合并?

linux - Docker 没有响应终端中的 CTRL+C

docker - 如何快速更新正在运行的 docker-compose 容器

docker - 如何对接 ASP.NET Core 2.0 应用程序?

ubuntu - 没有容器运行时使用端口的 docker-proxy

docker - 如何在版本 2 docker-compose 定义文件中定义网络?

linux - 我们可以将容器部署到 docker swarm 中的特定节点吗

docker - 如何在 "preparing"状态下获取 docker 服务任务的日志