如何将ASP.NET Core 2.0应用程序停靠?

时间:2017-10-16 16:46:36

标签: docker asp.net-core dockerfile

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

我试图按照这里的步骤进行操作:

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

这是我的Dockerfile:

public/

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

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?

2 个答案:

答案 0 :(得分:5)

如果是相关项目,则必须针对解决方案文件运行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

答案 1 :(得分:2)

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

即使您创建没有Docker支持的ASP.NET Core Web应用程序,也可以从Project > Docker Support菜单

将其添加到现有项目中

生成的Dockerfile执行定义基本映像,执行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