无法建立docker映像(ASP.NET Core)

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

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

这里是解决方案的样子

无法建立docker映像(ASP.NET Core)

这是我的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版本“ TooSeeWeb.csproj” -c版本-o / app'返回了   非零代码:1]无法部署'Dockerfile:   TooSeeWeb / Dockerfile':命令'/ bin / sh -c dotnet build   “ TooSeeWeb.csproj” -c版本-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

UPDATE2

我将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:COPY * .sln ./   COPY失败:未指定源文件

theresa88520 回答:无法建立docker映像(ASP.NET Core)

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分别还原每个项目

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
本文链接:https://www.f2er.com/3161218.html

大家都在问