在Visual Studio 2019中,我遇到了一个有趣的问题/情况。当您尝试创建由VS自动生成的dockerfile时,生成的
Dockerfile位于主项目中,而不是根(.sln)文件夹中,其中存在
.dockerignore。
我的项目具有以下文件夹结构:
<DIR> .
<DIR> ..
82 .dockerignore
6 305 .gitignore
<DIR> MyProject.API
<DIR> MyProject.API.Client
<DIR> MyProject.Model
<DIR> MyProject.Repository
<DIR> MyProject.Repository.Settings
6 567 MyProject.sln
4 899 README.md
<DIR> Tests.MyProject.Repository
<DIR> Tests.Model
<DIR> Tests.MongoContext.Infrastructure
<DIR> Tests.MongoQuery
<DIR> Tests.OdataFilters
主要项目是位于MyProject.API下的 MyProject.API.csproj
(Web API)。
从 Visual Studio 自动生成的 Dockerfile 结构如下:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["MyProject.API/MyProject.API.csproj", "MyProject.API/"]
COPY ["MyProject.Model/MyProject.Model.csproj", "MyProject.Model/"]
COPY ["MyProject.Repository/MyProject.Repository.csproj", "MyProject.Repository/"]
COPY ["MyProject.Repository.Settings/MyProject.Repository.Settings.csproj", "MyProject.Repository.Settings/"]
RUN dotnet restore "MyProject.API/MyProject.API.csproj"
COPY . .
WORKDIR "/src/MyProject.API"
RUN dotnet build "MyProject.API.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "MyProject.API.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.API.dll"]
当我尝试根据 Docker 的指示构建我的镜像
(链接) 时,出现了问题:
Linux 容器类型:
Step 7/20 : COPY ["MyProject.API/MyProject.API.csproj", "MyProject.API/"]
COPY failed: stat /var/lib/docker/tmp/docker-builder799586484/MyProject.API/MyProject.API.csproj: no such file or directory
Windows 容器类型:
Step 7/20 : COPY ["MyProject.API/MyProject.API.csproj", "MyProject.API/"]
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder753862033\MyProject.API\MyProject.API.csproj: The system cannot find the path specified.
根据
这个答案,我将我的Dockerfile移动到根目录(存在.sln和.dockerignore文件的位置),问题得以解决。