.Net 5项目Docker COPY文件找不到

gie*_*sx3 6 .net c# docker .net-core asp.net-core

我有一个名为 SaveGame 的 .Net 5 项目,Dockerfile由 Visual Studio 自动生成。检查了许多官方教程之类的东西 - Dockerfile 看起来总是一样的。

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["SaveGame.API/SaveGame.API.csproj", "SaveGame.API/"]
RUN dotnet restore "SaveGame.API/SaveGame.API.csproj"
COPY . .
WORKDIR "/src/SaveGame.API"
RUN dotnet build "SaveGame.API.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SaveGame.API.dll"]
Run Code Online (Sandbox Code Playgroud)

这是带有以下内容的文件夹Dockerfile在此输入图像描述

这是包含项目文件的文件夹: 在此输入图像描述

我尝试使用命令构建 Docker 映像

docker build -t savegame .

然而COPY命令未能给我这个

[+] Building 0.4s (9/17)
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 35B                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 32B                                                                                0.0s
 => [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0-buster-slim                                      0.3s
 => [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim                                   0.3s
 => CANCELED [build 1/7] FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim@sha256:1ab344109a790d555aa9d618edc012a  0.0s
 => => resolve mcr.microsoft.com/dotnet/sdk:5.0-buster-slim@sha256:1ab344109a790d555aa9d618edc012a2f88781f01238fd  0.0s
 => [internal] load build context                                                                                  0.0s
 => => transferring context: 2.78kB                                                                                0.0s
 => CANCELED [base 1/2] FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim@sha256:76b29928ab5b442469c89cc7eb5f6  0.0s
 => => resolve mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim@sha256:76b29928ab5b442469c89cc7eb5f6ef12d9e6e4139a  0.0s
 => CACHED [build 2/7] WORKDIR /src                                                                                0.0s
 => ERROR [build 3/7] COPY [SaveGame.API/SaveGame.API.csproj, SaveGame.API/]                                       0.0s
------
 > [build 3/7] COPY [SaveGame.API/SaveGame.API.csproj, SaveGame.API/]:
------
failed to solve with frontend dockerfile.v0: failed to build LLB: failed to compute cache key: "/SaveGame.API/SaveGame.API.csproj" not found: not found
Run Code Online (Sandbox Code Playgroud)

为什么找不到该文件?

编辑:

在 Github -> Azure WebApp (Linux) 部署作业上运行它,我得到了同样的结果

Status: Downloaded newer image for mcr.microsoft.com/dotnet/sdk:5.0-buster-slim
 ---> 8eab6017c69e
Step 6/17 : WORKDIR /app
 ---> Running in bbe55e12dd3a
COPY failed: file not found in build context or excluded by .dockerignore: stat src/SaveGame.API/SaveGame.API.csproj,: file does not exist
Removing intermediate container bbe55e12dd3a
 ---> 595dc1db2583
Step 7/17 : COPY src/SaveGame.API/SaveGame.API.csproj, SaveGame.API/
Error: Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)

Ryt*_*s I 4

WORKDIR不做你期望它做的事情。它设置 docker 容器中的当前目录。使用

COPY ["src/SaveGame.API/SaveGame.API.csproj", "SaveGame.API/"]
Run Code Online (Sandbox Code Playgroud)

它会工作得很好。另外,如果当前目录中没有文件,则需要在运行之前cd进入。SaveGame.APIdotnet restore.sln