Похоже, ваша проблема в том, что вы монтируете каталог проекта в виде тома, а затем разделяете его как между контейнерной средой Linux и локальной файловой системой Windows.Это путь к катастрофе.
Если вы добавите поддержку контейнера через Visual Studio, будет сгенерирован Dockerfile, подобный следующему.Это считается наилучшим практическим подходом для создания образов для проектов ASP.NET Core:
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/MyProject.csproj MyProject/
COPY MyProjectDependency/MyProjectDependency.csproj MyProjectDependency/
# etc.
RUN dotnet restore MyProject/MyProject.csproj
COPY . .
WORKDIR /src/MyProject
RUN dotnet build MyProject.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish MyProject.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.dll"]
Это многоступенчатая сборка (обозначается несколькими строками FROM
).Все, кроме заключительного этапа, отбрасывается, поэтому его необходимо скопировать с предыдущих этапов (т. Е. COPY --from=publish /app .
).Конечный результат такой же, как если бы вы просто скопировали уже опубликованное приложение в простое aspnetcore-runtime
изображение (т.е. без дополнительного веса инструментов сборки, исходного кода, пакетов NuGet и т. Д.), Но проект полностью скомпилирован и опубликован какчасть изображения build.