【问题标题】:How to create docker image in .NET Core with multiple project?如何在具有多个项目的 .NET Core 中创建 docker 映像?
【发布时间】:2019-08-06 13:29:01
【问题描述】:

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

我有 4 个项目。

测试数据 测试控制台 测试逻辑 测试数据2。

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

我想知道我在哪里创建 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 测试逻辑.csproj TestData2.csproj

没有找到。

【问题讨论】:

  • 将你的 docker 文件放到 Solution Items 文件夹(所有项目都在其中),一切都应该没问题。
  • 我试图把它放在解决方案的根目录下。错误:复制 *.cs proj 未指定源文件。复制失败。

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


【解决方案1】:

为了提高效率,您必须先复制所有项目的.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 指令,以简化流程。

【讨论】:

    【解决方案2】:

    尝试以下方法:

    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"]
    

    【讨论】:

    • 我收到了这个错误。复制失败:stat /var/lib/docker/overlay2/cf934d8bdb1a8ffda4a1ca52db81827bf3fcddcf8f296dba9b37a38c82fbd60b/merged/app/aspnetapp/src/testconsole/out:没有这样的文件或目录
    • 尝试将此行编辑为:COPY --from=build-env /app/aspnetapp/TestConsole/out ./
    • 我只安装了 docker 桌面,Error stat '/var/lib/docker/overlay2/bec9381dd84b05faba723a10fe7f452b8e1b084eae900fa00e5d90d4d7bb8042/merged/app/aspnetapp/src/TestConsole/out: no such file or directory'跨度>
    • COPY --from=build-env /app/aspnetapp/src/TestConsole/out ./中删除src
    • docker run -d -p 8080:80 --name testconsole testconsole,这看起来正确吗?我似乎无法访问本地主机
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多