【问题标题】:How to dockerize an ASP.NET Core 2.0 application?如何对接 ASP.NET Core 2.0 应用程序?
【发布时间】:2018-03-28 06:20:04
【问题描述】:

我有一个简单的 ASP.NET Core 2.0 应用程序,解决方案中有 2 个项目。一个项目是一个类库 (WorldLibrary.dll),由 Web 应用程序 (WeatherWeb.dll) 引用。

我已尝试按照此处的步骤操作:

https://docs.docker.com/engine/examples/dotnetcore/

这是我的 Dockerfile:

FROM microsoft/aspnetcore-build:2.0 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 microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "WeatherWeb.dll"]

但是,引用的 .dll 存在问题。我从“docker build”命令得到以下输出:

C:\Users\olavt\source\repos\Weather\WeatherWeb>docker build -t weather .
Sending build context to Docker daemon  6.398MB
Step 1/10 : FROM microsoft/aspnetcore-build:2.0 AS build-env
 ---> df4c9af52c86
Step 2/10 : WORKDIR /app
 ---> Using cache
 ---> ae9d1b099da7
Step 3/10 : COPY *.csproj ./
 ---> Using cache
 ---> 2d9f3fba6470
Step 4/10 : RUN dotnet restore
 ---> Using cache
 ---> 19af5fb355a3
Step 5/10 : COPY . ./
 ---> 1704520a3ced
Step 6/10 : RUN dotnet publish -c Release -o out
 ---> Running in 7bcdf847e4dc
/usr/share/dotnet/sdk/2.0.2/NuGet.targets(792,5): warning MSB3202: The project file "/WorldLibrary/WorldLibrary.csproj" was not found. [/app/WeatherWeb.csproj]
Microsoft (R) Build Engine version 15.4.8.50001 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

/usr/share/dotnet/sdk/2.0.2/Microsoft.Common.CurrentVersion.targets(1768,5): warning : The referenced project '../WorldLibrary/WorldLibrary.csproj' does not exist. [/app/WeatherWeb.csproj]
Controllers/Api/WeatherController.cs(6,7): error CS0246: The type or namespace name 'WorldLibrary' could not be found (are you missing a using directive or an assembly reference?) [/app/WeatherWeb.csproj]
Controllers/WeatherController.cs(6,7): error CS0246: The type or namespace name 'WorldLibrary' could not be found (are you missing a using directive or an assembly reference?) [/app/WeatherWeb.csproj]
Controllers/Api/WeatherController.cs(14,39): error CS0246: The type or namespace name 'Weather' could not be found (are you missing a using directive or an assembly reference?) [/app/WeatherWeb.csproj]
The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 1

C:\Users\olavt\source\repos\Weather\WeatherWeb>

我应该如何正确地将引用的 .dll 正确复制过来?

【问题讨论】:

  • 项目模板已经包含添加 docker 支持的选项。你试过了吗
  • 你也可以从Project菜单添加Docker支持,Docker Support

标签: docker asp.net-core dockerfile


【解决方案1】:

如果是相关项目,您必须对您的解决方案文件运行 dotnet restoredotnet publish,并将您的 docker 文件放在解决方案级别,以便您可以从中访问所有项目。

基本上,您需要在 docker 文件中进行的唯一更改是:

COPY *.sln ./
COPY ./your_proj1_folder/*.csproj ./your_proj1_folder/
COPY ./your_proj2_folder/*.csproj ./your_proj2_folder/
RUN dotnet restore

【讨论】:

    【解决方案2】:

    ASP.NET Core 项目模板包含一个选项,用于添加 Docker 支持以及针对 Linux 或 Windows 容器的选项。

    即使您创建一个不支持 Docker 的 ASP.NET Core Web 应用程序,您也可以从Project > Docker Support 菜单将其添加到现有项目中

    生成的Dockerfileexecutes 定义了基础镜像,执行 dotnet 恢复、构建、发布步骤并创建运行 Web 应用程序的最终镜像:

    FROM microsoft/aspnetcore:2.0 AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM microsoft/aspnetcore-build:2.0 AS build
    WORKDIR /src
    COPY *.sln ./
    COPY WebApplication1/WebApplication1.csproj WebApplication1/
    RUN dotnet restore
    COPY . .
    WORKDIR /src/WebApplication1
    RUN dotnet build -c Release -o /app
    
    FROM build AS publish
    RUN dotnet publish -c Release -o /app
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "WebApplication1.dll"]
    

    它还会生成一个docker-compose.yml 文件,用于描述您希望部署的映像。在本例中,我添加了 两个 Web 应用程序。第一个是在 Docker 支持下创建的。第二个,后来增加了对 Docker 的支持。 docker-compose.yml 文件包含两者:

    version: '3'
    
    services:
      webapplication1:
        image: webapplication1
        build:
          context: .
          dockerfile: WebApplication1\Dockerfile
    
      webapplication2:
        image: webapplication2
        build:
          context: .
          dockerfile: WebApplication2\Dockerfile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2018-07-16
      • 2018-03-06
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      相关资源
      最近更新 更多