4

我正在尝试为 ASP.NET Core 3.1 应用程序构建 docker 映像,但无法恢复包。我的解决方案有多个项目,复制所有项目文件后,我试图创建一个仅包含已恢复依赖项的层。

码头工人文件

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["ExampleApi/ExampleApi.csproj", "ExampleApi/ExampleApi/"]
COPY ["Common.Web/Common.Web.csproj", "ExampleApi/Common.Web/"]
COPY ["Example.Data/Example.Data.csproj", "ExampleApi/Example.Data/"]
COPY ["Example.Services/Example.Services.csproj", "ExampleApi/Example.Services/"]

RUN mkdir /tmp/build/
COPY . /tmp/build
RUN find /tmp/build -name *.csproj

RUN dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed
COPY . .
WORKDIR "/src/ExampleApi/ExampleApi"
RUN dotnet build "ExampleApi.csproj" -c Release -o /app --no-restore

FROM build AS publish
RUN dotnet publish "ExampleApi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ExampleApi.dll"]

Docker 构建

我在没有缓存的情况下运行,以便能够为每次运行输出容器内的所有 csproj 文件(否则它会被缓存并且文件不再显示)。

docker build --no-cache -f ExampleApi/Dockerfile .

Sending build context to Docker daemon  116.4MB
Step 1/22 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
 ---> a843e0fbe833
Step 2/22 : WORKDIR /app
 ---> Running in e33e9c821c0b
Removing intermediate container e33e9c821c0b
 ---> eec973a226e0
Step 3/22 : EXPOSE 80
 ---> Running in 8e813a3a8b85
Removing intermediate container 8e813a3a8b85
 ---> c8d95a3a1de4
Step 4/22 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
 ---> cef7866e800b
Step 5/22 : WORKDIR /src
 ---> Running in f56bf9402ed1
Removing intermediate container f56bf9402ed1
 ---> 55694332db0e
Step 6/22 : COPY ["ExampleApi/ExampleApi.csproj", "ExampleApi/ExampleApi/"]
 ---> 4beb2e169ec7
Step 7/22 : COPY ["Common.Web/Common.Web.csproj", "ExampleApi/Common.Web/"]
 ---> ed7a9c81e8f7
Step 8/22 : COPY ["Example.Data/Example.Data.csproj", "ExampleApi/Example.Data/"]
 ---> aaca52c111b4
Step 9/22 : COPY ["Example.Services/Example.Services.csproj", "ExampleApi/Example.Services/"]
 ---> efb15c17a096
Step 10/22 : RUN mkdir /tmp/build/
 ---> Running in 7da9eae324ca
Removing intermediate container 7da9eae324ca
 ---> b06126b19a7f
Step 11/22 : COPY . /tmp/build
 ---> 04598eaab98c
Step 12/22 : RUN find /tmp/build -name *.csproj
 ---> Running in 2fd26dba963d
/tmp/build/ExampleApi/ExampleApi.csproj
/tmp/build/Example.Data/Example.Data.csproj
/tmp/build/Common.Web/Common.Web.csproj
/tmp/build/Example.Sql/Example.!Sql.csproj
/tmp/build/Example.Services/Example.Services.csproj
/tmp/build/Example.Services.Tests/Example.Services.Tests.csproj
/tmp/build/Example.IdentityServer.Infrastructure/Example.IdentityServer.Infrastructure.csproj
/tmp/build/Example.IdentityServer/Example.IdentityServer.csproj
/tmp/build/Example.Data.Tests/Example.Data.Tests.csproj
/tmp/build/ExampleIntegrationApi/ExampleIntegrationApi.csproj
Removing intermediate container 2fd26dba963d
 ---> 78eadf796305
Step 13/22 : RUN dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed
 ---> Running in 5dc9b5bbd04e
MSBUILD : error MSB1009: Project file does not exist.
Switch: ExampleApi/ExampleApi.csproj
The command '/bin/sh -c dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed' returned a non-zero code: 1

find表示它ExampleApi/ExampleApi.csproj在那里,但dotnet restore抱怨找不到它。

4

0 回答 0