如何为引用同级目录的项目构建Dockerfile?

如何为引用同级目录的项目构建Dockerfile?,docker,.net-core,Docker,.net Core,我正在尝试为.NET核心单元测试项目创建一个Docker映像,这样我就可以在Linux环境中运行单元测试(因为这是部署我的应用程序的地方),而不是在Windows开发环境中运行。解决方案结构如下所示: MySolution | |--MyApp | |--MyLib | |--UnitTests UnitTestsreferencesMyApp,以及MyAppreferencesMyLib。因此,我在我的UnitTests项目中创建了一个Dockerfile: FROM microsoft/d

我正在尝试为.NET核心单元测试项目创建一个Docker映像,这样我就可以在Linux环境中运行单元测试(因为这是部署我的应用程序的地方),而不是在Windows开发环境中运行。解决方案结构如下所示:

MySolution
|
|--MyApp
|
|--MyLib
|
|--UnitTests
UnitTests
references
MyApp
,以及
MyApp
references
MyLib
。因此,我在我的
UnitTests
项目中创建了一个Dockerfile:

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY UnitTests.csproj UnitTests/
COPY *.config UnitTests/
COPY appsettings.json UnitTests/
COPY ../MyApp/MyApp.csproj MyApp/
COPY ../MyLib/MyLib.csproj MyLib/
WORKDIR /src/UnitTests
RUN dotnet restore -nowarn:msb3202,nu1503
RUN dotnet build UnitTests.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish UnitTests.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["tail", "-f", "/dev/null"]
但当我试图塑造形象时:

docker build --pull -t unittests .
当我试图复制我的应用程序时,它达到了一个关键点,但是失败了

复制失败:生成上下文之外的禁止路径:../MyApp/MyApp.csproj()


我不能将Dockerfile放在根目录中,因为这适用于解决方案;它专门用于我的单元测试。那么,我应该如何在Dockerfile中包含项目的依赖项呢?

一种方法是将
Dockerfile
放在UnitTests目录中,但从父目录调用Docker,指定Dockerfile的路径:

docker build --pull -t unittests --file UnitTest/Dockerfile .
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY /UnitTests/UnitTests.csproj UnitTests/
COPY /UnitTests/*.config UnitTests/
COPY /UnitTests/appsettings.json UnitTests/
COPY /MyApp/MyApp.csproj MyApp/
COPY /MyLib/MyLib.csproj MyLib/
WORKDIR /src/UnitTests
RUN dotnet restore -nowarn:msb3202,nu1503
RUN dotnet build UnitTests.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish UnitTests.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["tail", "-f", "/dev/null"]
然后,您需要调整dockerfile中的一些路径:

docker build --pull -t unittests --file UnitTest/Dockerfile .
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY /UnitTests/UnitTests.csproj UnitTests/
COPY /UnitTests/*.config UnitTests/
COPY /UnitTests/appsettings.json UnitTests/
COPY /MyApp/MyApp.csproj MyApp/
COPY /MyLib/MyLib.csproj MyLib/
WORKDIR /src/UnitTests
RUN dotnet restore -nowarn:msb3202,nu1503
RUN dotnet build UnitTests.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish UnitTests.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["tail", "-f", "/dev/null"]
另一种处理方法是在根目录中有多个DockerFile:

Dockerfile <-- "Main" dockerfile for the build of the product
Dockerfile.UnitTests <!-- Unit test dockerfile
Dockerfile