我的所有项目都是.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
没找到。
请尝试以下方法:
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"]
为了提高效率,您必须先复制所有项目的.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
指令,以简化流程。