簡體   English   中英

子目錄中的Dockerfile導致構建上下文異常之外的禁止路徑

[英]Dockerfile in subdirectory causes Forbidden path outside the build context exception

我正在嘗試將 dockerfile 放在我的主要啟動項目AppMain的子目錄中。 AppMain有一個名為AppDependency的依賴項目。 當dockerfile在根目錄AppMain ,一切工作正常,但是當它嵌套在一個子目錄AppMain ,它失敗

4>Step 5/20 : COPY ["AppMain/AppMain.csproj", "AppMain/"]
4>COPY failed: stat /var/lib/docker/tmp/docker-builder453314675/AppMain/AppMain.csproj: no such file or directory

所以這對我來說很有意義,因為它嵌套在一個子目錄中,所以我只是在 COPY 命令前面添加了一個“../”,但這會導致以下上下文異常:

4>COPY failed: Forbidden path outside the build context: ../AppMain/AppMain.csproj ()

好吧,這也是有道理的,因為 docker 文檔指出上下文從 dockerfile 所在的位置開始,但這讓我提出了真正的問題。

  1. 如果它不能復制到 dockerfile 所在的位置之外,並且在它位於 AppMain 的根目錄中時它可以工作,那么為什么在復制AppReference項目時它不會失敗,該項目顯然位於AppReference文件所在位置的上方和上下文之外因為它必須上升一個目錄,然后下降到AppReference項目?
  2. 有沒有辦法實現將 dockerfile 嵌套在子目錄中?

下面列出了整個 docker 文件。

FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["AppMain/AppMain.csproj", "AppMain/"]
COPY ["AppReference/AppReference.csproj", "AppReference/"]
RUN dotnet restore "AppMain/AppMain.csproj"
COPY . .
WORKDIR "/src/AppMain"
RUN dotnet build "AppMain.csproj" -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "AppMain.dll"]

當使用docker build -t xxx . 要在子目錄中構建,只有. 將提交給 docker daemon 進行docker build 父文件夾中的東西將無法提交給 docker 引擎進行構建。

因此,您需要使用cd ..將執行目錄移回父文件夾,然后使用 next 進行構建,然后它將發送. 現在是引擎的父文件夾的內容(但你現在需要指定dockerfile,像這樣

docker build -t xxx -f ./YOUR_Subdirectory/Dockerfile .

它真的很有效。 這是什么 ? 安全警告:您正在針對非 Windows Docker 主機從 Windows 構建 Docker 映像。 添加到構建上下文的所有文件和目錄都將具有“-rwxr-xr-x”權限。 建議仔細檢查並重置敏感文件和目錄的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM