代码之家  ›  专栏  ›  技术社区  ›  HC1122

Dockerfile用于两个项目的解决方案

  •  0
  • HC1122  · 技术社区  · 1 年前

    我有。NET 6应用程序,文件夹结构如下:

    TestProject
     - MyProject.sln
     - docker-compose.yaml
     - MyProject/
        - MyProject.csproj
        - Dockerfile
     - MyProject.Db/
         - MyProject.Db.csproj   
    

    这是我的Dockerfile,它是由VisualStudio自动生成的

    # Stage 1: Base Image with ASP.NET runtime
    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    # Stage 2: Build Image with SDK for compiling the application
    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
    WORKDIR /src
    COPY ["/MyProject.csproj", "MyProject/"]
    COPY ["/MyProject.Db/MyProject.Db.csproj", "MyProject.Db/"]
    
    RUN dotnet restore "MyProject/MyProject.csproj"
    WORKDIR "/src/MyProject"
    COPY . .
    RUN dotnet build "MyProject.csproj" -c Release -o /app/build
    
    # Stage 3: Publish Image for a smaller runtime image
    FROM build AS publish
    RUN dotnet publish "MyProject.csproj" -c Release -o /app/publish /p:UseAppHost=false
    
    # Stage 4: Final Image with only necessary artifacts
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "MyProject.dll"]
    

    我收到一个错误,说:

     ERROR  [app build 4/8] COPY [/MyProject.Db/MyProject.Db.csproj, MyProject.Db/]:
    ------
    failed to solve: failed to compute cache key: failed to calculate checksum of ref 9dfeae07-144f-4a1a-9a88-4816eb08f9d9::p80g09cb0geba6x3tewswlfug: "/MyProject.Db/MyProject.Db.csproj": not found
    

    我的docker compose文件看起来是这样的:

    version: '3.8'
    
    services:
      database:
        build:
          context: ./MyProject.Db
          dockerfile: Dockerfile
        ports:
          - "1433:1433"
    
      app:
        build:
          context: ./MyProject
          dockerfile: Dockerfile
        ports:
          - "8080:80"
        depends_on:
          - database
    

    我应该如何修复COPY命令以使其正常工作?我看到其他解决方案说要将Dockerfile移到与.sln相同的文件夹中,但我不想这样做。还有别的办法吗?

    谢谢

    0 回复  |  直到 1 年前
        1
  •  0
  •   HC1122    1 年前

    我找到了一种解决问题的方法,将docker-compose.yaml行更改为:

    app:
        build:
          context: .
          dockerfile: /MyProject/Dockerfile
    

    和Dockerfile行:

    COPY ["/MyProject/MyProject.csproj", "MyProject/"]
    COPY ["/MyProject.Db/MyProject.Db.csproj", "MyProject.Db/"]
    
    推荐文章