Docker - Композит для ASP. Net Ядро на Windows Контейнеры - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь построить основной контейнер ASP. Net на базе Windows, потому что я хотел бы протестировать некоторые запросы AD. В то же время я хотел бы поделиться своей папкой разработки с контейнером, чтобы я мог редактировать файлы на лету, не перекомпилируя контейнер каждый раз. На Linux и laravel это работало вполне нормально:

     volumes:
        - ./:/var/www

На windows мой docker файл выглядит так:

FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:latest
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "project.dll"]

и мой composer вот так:

version: '3.5'
services:

  #ASP
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:80"
    environment:
      - "ASPNETCORE_URLS=http://+:80"
    container_name: app
    working_dir: /app
    #restart: on-failure
    volumes:
      - type: bind
        source: .\
        target: c:\app
    entrypoint: ["dotnet", "project.dll"]

Как только я добавляю часть томов, я получаю следующее сообщение:

It was not possible to find any installed .NET Core SDKs
  Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
      https://aka.ms/dotnet-download

Без томов я могу по крайней мере запустить его нормально, но попробовать что-то вроде ужасно,)

Есть идеи, что я делаю не так?


Обновление Я обнаружил ошибку. Данные приложения после его монтирования пусты, но должны содержать файлы приложения.

C:\app>dir
 Volume in drive C has no label.
 Volume Serial Number is 76CF-40D6

 Directory of C:\app

05/03/2020  11:34 AM    <DIR>          .
05/03/2020  11:34 AM    <DIR>          ..
05/01/2020  10:25 PM               162 appsettings.Development.json
05/01/2020  10:25 PM               192 appsettings.json
05/03/2020  11:34 AM           106,534 project.deps.json
05/03/2020  11:34 AM             9,216 project.dll
05/03/2020  11:34 AM           169,984 project.exe
05/03/2020  11:34 AM             1,864 project.pdb
05/03/2020  11:34 AM               224 project.runtimeconfig.json
05/03/2020  11:34 AM            35,840 project.Views.dll
05/03/2020  11:34 AM             3,544 project.Views.pdb
05/03/2020  11:34 AM               490 web.config
05/03/2020  11:34 AM    <DIR>          wwwroot
              10 File(s)        328,050 bytes
               3 Dir(s)  21,299,187,712 bytes free

Тем не менее, мой вопрос заключается в том, что мне нужно изменить, чтобы иметь папку приложения на локальном диске?


Еще одно обновление. Я смонтировал папку, но, к сожалению, в отличие от Lavavel, я не могу редактировать файлы на лету, даже если я изменил все на Razor. Может быть, мне нужно как-то добавить еще одну папку в контейнер ... На данный момент я думаю, что лучший способ - это установить IIS локально ...


Обновление, наконец, оно работает. Завтра обновлю решение.

1 Ответ

0 голосов
/ 04 мая 2020

Хорошо, вот мое объяснение, что мне пришлось изменить.

  1. Активация бритвы

    • В файле project.csproj:

    PackageReference Include = "Microsoft.AspNetCore. Mvc .Razor.RuntimeCompilation" Version = "3.1.3" Condition = "'$ (Configuration)' == 'Debug'"

    • В настройках запуска. json

    "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore. Mvc .Razor.RuntimeCompilation"

  2. Изменить на Razor

    • Редактирование сервисов Startup.cs

    . AddControllersWithViews () .AddRazorRuntimeCompilation ();

        services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
        {
            var libraryPath = Path.GetFullPath(
                Path.Combine(HostEnvironment.ContentRootPath, "..", "ProjectFolderName"));
            options.FileProviders.Add(new PhysicalFileProvider(libraryPath));                
        });
    

(важно имя папки проекта)

Добавить папку проекта в контейнер

тома: -. \ Bin \ Debug \ netcoreapp3.1: c: \ app: ro -.: c: \ project

...