如何在多个项目的.NET Core中创建docker镜像?

问题描述 投票:1回答:2

我的所有项目都是.NET Core SDK 2.2。

我有4个项目。

TestData TestConsole TestLogic TestData2。

在启动时,我将控制台设置为启动项目,并且每个项目都相互引用。

我想知道在哪里创建dockerfile以及我应该在dockerfile中添加什么?

这是我的dockerfile当前:

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

错误:

跳过项目

TestData.csproj TestLogic.csproj TestData2.csproj

没找到。

c# .net docker .net-core dockerfile
2个回答
0
投票

请尝试以下方法:

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

COPY . ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build-env /app/aspnetapp/src/TestConsole/out ./
ENTRYPOINT ["dotnet", "TestConsole.dll"]

0
投票

为了提高效率,您必须先复制所有项目的.csproj文件,然后恢复以缓存结果。然后复制其他所有内容并发布项目。所以你的Dockerfile看起来很像

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY aspnetapp/aspnetapp.csproj aspnetapp/
COPY TestData/TestData.csproj TestData/
COPY TestLogic/TestLogic.csproj TestLogic/
COPY TestData2/TestData2.csproj TestData2/
RUN dotnet restore ./aspnetapp/aspnetapp.csproj

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

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

如果解决方案中有更多项目以减少容器构建时间,则可能需要在还原后显式复制项目。

在我的项目中,我创建了一个工具,可以从命令行为主项目依赖项创建COPY指令,以简化流程。

© www.soinside.com 2019 - 2024. All rights reserved.