【问题标题】:dotnet aspnetcore docker build fails with a 145 error codedotnet aspnetcore docker build 失败并显示 145 错误代码
【发布时间】:2017-07-09 20:19:08
【问题描述】:

我使用this tutorial 创建了我的第一个 docker webapi 项目。

我使用的是 Windows 7(泊坞窗工具箱)。

这是我跑过的:

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 docker asp.net-core docker-toolbox


    【解决方案1】:

    您使用的映像仅包含 .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。

    【讨论】:

    • 感谢您的回答,但让我明白一些事情。我正在尝试基于另一个包含我需要的运行时的 docker 镜像来构建一个 docker 镜像。我知道构建过程需要 SDK,但为什么我需要包含 SDK 的基础镜像?
    • @AmirPopovich 我在答案中添加了更多细节,如果您有任何其他问题,请告诉我。
    • 很好的解释!!!非常感谢。最后一个问题:是否有只包含运行时和 SDK 的较小镜像?有什么办法可以在我的 docker 文件中添加 2 个 FROM 命令?
    • @AmirPopovich 据我所知,不幸的是,SDK 有点笨重。随着时间的推移,将您的构建过程编码到 Dockerfile 中肯定会带来好处,但您必须确定在您的情况下成本是否值得。无法使用多个 FROM 命令从两个图像派生,但是您可以链接图像(Dockerfile A 派生自 Dockerfile B,Dockerfile B 派生自 Dockerfile C - 把它想象成洋葱层。)
    • @Polynomial 我面临着类似的问题stackoverflow.com/questions/60898187/…
    【解决方案2】:

    在我的情况下是一个愚蠢的错误,但也许可以帮助某人。 我更改了项目名称,这破坏了 docker compose。 因此,在我的情况下,Web 应用程序的文件夹、项目(它是 .csproj 文件)和使用 dotnet 运行的 DLL 应该具有相同的名称,因为我在 dockerfile 中使用了一个假设该变量的变量。 总之,仔细检查我们为每件事使用的名称。

    【讨论】:

    • 这也是我的问题,它区分大小写,所以名称也应该相同。
    【解决方案3】:

    我收到此错误是因为 Dockerfile 和 docker-compose.yml 之间存在差异

    Dockerfile(原始):

    FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
    WORKDIR /app
    ...
    

    我更改了 Dockerfile 以将文件移动到 nginx 的默认目录...

    Dockerfile(更改):

    FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
    WORKDIR /usr/share/nginx/html
    ...
    

    但是 docker-compose.yml 引用了旧文件夹...

    docker-compose.yml(原版):

    services:
      web:
        working_dir: /app
    

    要修复它,只需更新 working_dir 以指向新目录...

    docker-compose.yml(修复):

    services:
      web:
        working_dir: /usr/share/nginx/html
    

    【讨论】:

      【解决方案4】:

      就我而言,我重命名了程序集名称,这导致失败。我注意到 Dcokerfile 的最后一行

      ENTRYPOINT ["dotnet", "assembly_name.dll"]
      

      assembly_name 不正确。

      【讨论】:

        猜你喜欢
        • 2020-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 2012-01-26
        • 1970-01-01
        相关资源
        最近更新 更多