如何在具有多个项目的.NET Core中创建Docker映像?

时间:2019-03-15 12:53:20

标签: c# .net docker .net-core dockerfile

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

我有4个项目。

TestData 测试控制台 测试逻辑 TestData2。

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

我想知道在哪里创建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

找不到

2 个答案:

答案 0 :(得分: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"]

答案 1 :(得分:0)

要使其高效,您必须首先复制项目的所有choose files文件,然后还原以缓存结果。然后复制其他所有内容并发布该项目。因此,您的Dockerfile看起来类似于

.csproj

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

在我的项目中,我创建了一个工具,该工具可以从命令行为主要项目依赖项创建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"] 指令,以简化过程。