[英]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 所在的位置開始,但這讓我提出了真正的問題。
AppReference
項目時它不會失敗,該項目顯然位於AppReference
文件所在位置的上方和上下文之外因為它必須上升一個目錄,然后下降到AppReference
項目?下面列出了整個 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.