【问题标题】:Cannot build docker image (ASP.NET Core )无法构建 docker 映像(ASP.NET Core)
【发布时间】:2019-11-05 08:28:01
【问题描述】:

我有 asp.net 核心解决方案,其中包含 3 个项目。

我想将它部署到 docker 容器中。

解决方案如下所示

这是我的 Dockerfile

 FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "tooseeweb.dll"]

但是当我运行 docker build 我在控制台中得到了这个

跳过项目“/TooSeeWeb.Core/TooSeeWeb.Core.csproj”,因为它 没找到。

跳过项目 “/TooSeeWeb.Infrastructure/TooSeeWeb.Infrastructure.csproj”,因为它 没找到。

MSBUILD:错误 MSB1009:项目文件不存在。切换:TooSeeWeb.csproj

错误:ResponseItem.ErrorDetail[code=1,message=命令'/bin/sh -c dotnet build "TooSeeWeb.csproj" -c Release -o /app' 返回了一个 非零代码:1] 未能部署 ' Dockerfile: TooSeeWeb/Dockerfile':命令'/bin/sh -c dotnet build "TooSeeWeb.csproj" -c Release -o /app' 返回非零代码:1

哪里有问题?

更新

我的解决方案的文件夹结构

TooSeeWeb
 |- aspnet-core(folder)
    |-TooSeeWeb (folder)
      |- TooSeeWeb.sln
      |- TooSeeWeb
         |-Dockerfile
         |- TooSeeWeb.csproj
      |- TooSeeWeb.Core(folder)
         |- TooSeeWeb.Core.csproj
      |- TooSeeWeb.Infrastructure(folder)
         |- TooSeeWeb.Infrastructure.csproj

更新2

我将 dockerfile 移动到与 sln 相同的文件夹中(它是一个文件夹)

现在我的 docker 文件看起来像这样

    ROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.sln ./
COPY TooSeeWeb/*.csproj ./TooSeeWeb/
COPY TooSeeWeb.Core/*.csproj ./TooSeeWeb.Core/
COPY TooSeeWeb.Infrastructure/.*csproj ./TooSeeWeb.Infrastructure/
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app/TooSeeWeb
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "tooseeweb.dll"]

但我有错误

第 4/14 步:复制 *.sln ./ 复制失败:没有指定源文件

【问题讨论】:

    标签: c# asp.net docker asp.net-core


    【解决方案1】:

    COPY 命令不会在目标文件夹中重现相同的文件夹结构,因此您的 .csproj 文件都在同一个文件夹中,并且引用已损坏。 尝试添加

    COPY TooSeeWeb.Core/*.csproj ./TooSeeWebCore/
    COPY TooSeeWeb.Infrastructure/*.csproj ./TooSeeWeb.Infrastructure/
    

    更新:
    解决方案的示例文件夹结构,子文件夹中包含项目

    src
     |-my.sln
     |-Dockerfile
     |-Web (folder)
       |-web.csproj
     |-Core (folder)
       |-core.csproj
     |-Infrastructure (folder)
       |-infrastructure.csproj
    

    Dockerfile 将是

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
    WORKDIR /app
    
    # Copy csproj and restore as distinct layers
    COPY *.sln ./
    COPY Web/*.csproj ./Web/
    COPY Core/*.csproj ./Core/
    COPY Infrastructure/.*csproj ./Infrastructure/
    RUN dotnet restore
    
    # Copy everything else and build
    COPY . ./
    WORKDIR /app/Web
    RUN dotnet build
    

    更新 2
    如果没有解决方案文件,那么我认为您需要单独 dotnet restore 每个项目

    COPY Web/*.csproj ./Web/
    COPY Core/*.csproj ./Core/
    COPY Infrastructure/.*csproj ./Infrastructure/
    RUN dotnet restore ./Web/Web.csproj
    RUN dotnet restore ./Core/Core.csproj
    RUN dotnet restore ./Infrastructure/Infrastructure.csproj
    etc
    

    【讨论】:

    • Step 4/12 : COPY TooSeeWeb.Core/*.csproj ./TooSeeWeb.Core/ Error: ResponseItem.ErrorDetail[code=<null>,message=COPY failed: no source files were specified] Failed to deploy '<unknown> Dockerfile: TooSeeWeb/Dockerfile': COPY failed: no source files were specified 马上去
    • 所以 Dockerfile 在 TooSeeWeb 文件夹中,所以你仍然有相对引用的问题。我已经更新了我的答案以显示一种可能的解决方案,或者您可以将 Dockerfile 保留在原处并调整路径。
    • 这没有帮助,或者我做错了。我用解决方案树更新了问题
    • 看看我的评论和更新的答案。将您的 Dockerfile 上移一个文件夹,然后查看我提供的 Dockerfile 的结构。将每个项目分别复制到目标中的子文件夹中。请务必在 dotnet 构建之前添加 WORKDIR /app/TooSeeWeb。
    • 我试过了,docker找不到.sln我更新了问题
    猜你喜欢
    • 2021-12-24
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多