我在构建dockerized应用程序时遇到问题,需要一些帮助。
该应用程序由多个.Net解决方案组成,它们分别作为docker容器构建和启动。我有一个具有以下结构的工作版本:
使用(简化的)dockerfile,如:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY Project1/Subfolder1/project1.csproj project1/
COPY . .
WORKDIR /src/project1
RUN dotnet build project1.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish distributor.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "project1.dll"]
和一个(简化的)docker-compose,如:
version: "3.5"
services:
project1:
container_name: main_project1
build:
context: ../project1
dockerfile: ./project1/Dockerfile
command:
- "dotnet run"
working_dir: /app
project2:
container_name: main_project2
build:
context: ../project2
dockerfile: ./project2/Dockerfile
command:
- "dotnet run"
working_dir: /app
实际上,还有更多的.Net容器和一些前端/数据库内容。
现在,我尝试将所有常见的定义,模型,...打包在一个额外的项目(.net类库)中,并在每个解决方案中对其进行引用,以最小化多个代码。
问题是,当使用类似这样的命令时,因为通用的.net项目不在project1 / 2的上下文中,所以我无法构建该项目。
COPY project1/project1/project1.csproj project1/
COPY ../common/common.csproj common/
我试图将docker-compose中的上下文更改为../并修改路径,但遇到一些读取权限错误。
是否有一些通用的方法来处理我可能错过的此类问题?
编辑:我们决定使用Git子模块现在将第二个项目带入其他项目的构建上下文中。
问候 斯文