我有一个简单的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?
答案 0 :(得分:5)
如果是相关项目,则必须针对解决方案文件运行dotnet restore
和dotnet 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