一个Docker映像中有多个.NET项目

时间:2020-03-12 13:34:03

标签: docker .net-core docker-compose

我的项目结构如下:

-Solution
 -docker-compose.yml
 -MainProject.csproj
   -Dockerfile
   -Database
     -Dockerfile
 -Microsoft.Identity.Web.csproj

MainProject依赖于Microsoft.Identity.Web。我想要的是能够运行docker-compose up --build,并且这应该构建链接在一起的MainProject和Database,这在我当前的解决方案中有效。当我添加对Microsoft.Identity.Web的引用时,这是行不通的,因为MainProject的Dockerfile在构建中不包括此引用。

这是我的Dockerfile和docker-compose:

Dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

# Copy everything else and build
COPY . ./
RUN dotnet restore MainProject/*.csproj
RUN dotnet publish MainProject/*.csproj -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .

EXPOSE 80

ENTRYPOINT ["dotnet", "MainProject.dll"]

docker-compose

version: "3.7"
services:
  dotnet-backend:
    container_name: dotnet-backend
    build: ./MainProject/
    env_file: .env
    links:
      - mssql-db
    ports:
      - "8000:80"
  mssql-db:
    container_name: mssql-db
    build: ./MainProject/Database
    volumes:
     - ./Database/:/scripts/
    ports:
      - "1433:1433"

我尝试了在不同论坛上建议的几种解决方案,但没有任何效果。一些解决方案建议将Dockerfile移至解决方案级别,但我想避免这种情况。是否有人拥有可用于在同一解决方案中包含对其他项目的引用的Dockerfile?这必须与使用docker-compose up --build兼容。

编辑:本文:https://www.softwaredeveloper.blog/multi-project-dotnet-core-solution-in-docker-image#solution很好地总结了我想要实现的目标,但是对我来说解决方案并不完整。它建议从解决方案级别运行docker build -f PROJECT_DIRECTORY/Dockerfile -t IMAGE_NAME .,这显然会将构建上下文设置为解决方案级别。但是我不确定这如何转换为docker-compose文件。我尝试将docker-compose放在解决方案级别,并将Dockerfile放在项目级别,但是运行docker-compose up --build仍然会给我这个错误:

/usr/share/dotnet/sdk/3.1.102/Microsoft.Common.CurrentVersion.targets(1875,5): warning : The referenced project '../../Users/me/source/repos/active-directory-aspnetcore-webapp-openidconnect-v2/Microsoft.Identity.Web/Microsoft.Identity.Web.csproj' does not exist. [/app/MainProject.csproj]
Startup.cs(11,17): error CS0234: The type or namespace name 'Identity' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [/app/MainProject.csproj]
Startup.cs(12,17): error CS0234: The type or namespace name 'Identity' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [/app/MainProject.csproj]
ERROR: Service 'dotnet-backend' failed to build: The command '/bin/sh -c dotnet publish *.csproj -c Release -o out' returned a non-zero code: 1

0 个答案:

没有答案