我所有的项目都是.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
找不到。
答案 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"]
指令,以简化过程。