Docker拷贝ASP.net Core失败

6
我正在尝试使用Docker运行我的ASP.net Core应用程序,但由于某些原因,每次我尝试使用不同的Dockerfile方法时,我都无法通过复制目录的方式实现。 我做错了什么?我尝试按照Microsoft网站上的逐步指南使用自己的项目,但没有成功。 我收到的cmd错误如下:
C:\dev\Dmail\Dmail.API>docker build -t aspnetapp .
Sending build context to Docker daemon  21.79MB
Step 1/18 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
 ---> 47da1e9634dc
Step 2/18 : WORKDIR /app
 ---> Using cache
 ---> bf490aa67962
Step 3/18 : EXPOSE 80
 ---> Using cache
 ---> d172deff350a
Step 4/18 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
 ---> 4a651b73be3d
Step 5/18 : WORKDIR /src
 ---> Using cache
 ---> c607b7f04e23
Step 6/18 : COPY ["Dmail.API/Dmail.API.csproj", "Dmail.API/"]
COPY failed: stat /var/lib/docker/tmp/docker-builder531905822/Dmail.API/Dmail.API.csproj: no such file or directory

C:\dev\Dmail\Dmail.API>

这里是我的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/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Dmail.API/Dmail.API.csproj", "Dmail.API/"]
COPY ["Dmail.Core/Dmail.Core.csproj", "Dmail.Core/"]
COPY ["Dmail.Data/Dmail.Data.csproj", "Dmail.Data/"]
RUN dotnet restore "Dmail.API/Dmail.API.csproj"
COPY . .
WORKDIR "/src/Dmail.API"
RUN dotnet build "Dmail.API.csproj" -c Release -o /app/build

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

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

1
你需要在src目录下创建Dmail.API文件夹。你还需要创建Dmail.Core和Dmail.Data文件夹。 - golobitch
@golobich 你是指像这样吗? WORKDIR /src/Dmail.API/ - Darmon
@golobich,我不太清楚你所说的创建目录是什么意思。当我复制csproj文件时,在同一行中指定目录Dmail.Core/,它难道不会自动创建吗? - Darmon
1
不,复制不会创建目录。复制只会将文件从一个目录复制到另一个目录。如果目录不存在,它将失败。 - golobitch
1个回答

16

经过长时间在网上寻找解决方案后,我终于成功解决了问题。首先,Dockerfile是由Visual Studio自动生成的,在ASP.net项目上按添加然后选择Docker支持即可。 Visual Studio会将文件放置在该项目内。 为了解决问题,我所做的就是将文件不加修改地移动到解决方案文件夹中,对我而言该文件夹名为Dmail。例如,我的文件结构如下:

  • Dmail(解决方案)
  • Dmail.API(项目)
  • Dmail.Core(项目)
  • Dmail.Data(项目)

1
这对于一个具有多个微服务(项目)的架构来说是一个糟糕的解决方案。 - Nyxero
1
这对于一个具有多个微服务(项目)的结构来说是一个糟糕的解决方案。 - undefined
我们如何解决这个问题?如果我们的解决方案中有多个项目,每个项目都有自己的Docker文件,那该怎么办? - Zapnologica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接