【问题标题】:Docker-Compose for ASP.Net Core on Windows Containers用于 Windows 容器上的 ASP.Net Core 的 Docker-Compose
【发布时间】:2020-05-03 10:25:18
【问题描述】:

我正在尝试在 Windows 基础上构建一个 ASP.Net Core 容器,因为我想测试一些 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"]

我的作曲家是这样的:

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

我的问题仍然是,我需要更改什么才能在本地磁盘上拥有 app 文件夹?


另一个更新。 我安装了文件夹,但不幸的是,与 Lavavel 不同,即使我将所有内容都更改为 Razor,我也无法即时编辑文件。也许我必须以某种方式将另一个文件夹添加到容器中...目前我在想最好的方法是在本地安装 IIS...


更新,终于成功了。明天我会更新解决方案。

【问题讨论】:

  • “知道我做错了什么吗?”您根本不应该将源代码复制到 Docker 容器中。在您的开发机器或 CI 机器上运行 dotnet publish,然后仅将已发布的工件部署到 Docker 容器。 mcr.microsoft.com/dotnet/core/aspnet:latest 正是此类场景的基础镜像,因为它没有捆绑 .NET Core SDK,因此无法运行 dotnet publish

标签: docker asp.net-core docker-compose


【解决方案1】:

好的,这就是我的解释,我必须改变什么。

  1. 激活剃刀

    • 在 project.csproj 文件中:

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

    • 在 launchsettings.json 中

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

  2. 换成剃刀

    • 编辑 Startup.cs

    services.AddControllersWithViews() .AddRazorRuntimeCompilation();

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

(重要的是项目文件夹名称)

  1. 将项目文件夹添加到容器中

    卷: - .\bin\Debug\netcoreapp3.1:c:\app:ro - .:c:\project

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 2018-11-17
    • 2016-06-30
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多