子目录中的Dockerfile导致构建上下文异常之外的禁止路径

时间:2019-08-15 14:54:14

标签: docker dockerfile

我正在尝试将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项目(显然位于docker所在位置的上方)时它为什么不会失败?文件位于上下文之外,因为它必须上一个目录然后下到AppReference项目?
  2. 有没有办法将dockerfile嵌套在子目录中?

下面列出了整个docker文件。

  

FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS基础

     

WORKDIR / app

     

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS构建

     

WORKDIR / src

     

COPY [“ AppMain / AppMain.csproj”,“ AppMain /”]

     

COPY [“ AppReference / AppReference.csproj”,“ AppReference /”]

     

运行dotnet还原“ AppMain / AppMain.csproj”

     

复制。

     

WORKDIR“ / src / AppMain”

     

运行dotnet构建“ AppMain.csproj” -c版本-o / app

     

从FROM构建AS发布

     

RUN dotnet发布“ AppMain.csproj” -c版本-o / app

     

FROM基本AS最终版本

     

WORKDIR / app

     

COPY --from = publish / app。

     

ENTRYPOINT [“ dotnet”,“ AppMain.dll”]

2 个答案:

答案 0 :(得分:1)

在使用docker build -t xxx .构建子目录时,仅.中的内容将提交给docker build的docker守护进程。父文件夹中的内容将无法提交到Docker引擎进行构建。

因此,您需要使用cd ..将执行目录移回父文件夹,然后使用next进行构建,然后它将.发送到引擎,该docker build -t xxx -f ./YOUR_Subdirectory/Dockerfile . 现在是父文件夹的内容(但是您现在需要指定dockerfile,例如this

<ImageView
        android:id="@+id/poster_image"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@id/buttons_group"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/buttons_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/poster_image"
        app:layout_constraintBottom_toTopOf="@id/imdb_placeholder"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="parent">

    <Button
            android:id="@+id/trailer_button"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/ic_play"
            android:foreground="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/watch_later_button"
            app:layout_constraintTop_toTopOf="@id/buttons_group"
            app:layout_constraintBottom_toBottomOf="@id/buttons_group"/>

    <Button
            android:id="@+id/watch_later_button"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/ic_watch_later"
            android:foreground="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            app:layout_constraintTop_toTopOf="@id/buttons_group"
            app:layout_constraintBottom_toBottomOf="@id/buttons_group"
            app:layout_constraintStart_toEndOf="@+id/trailer_button"
            app:layout_constraintEnd_toStartOf="@+id/share_movie_button"/>
    <Button
            android:id="@+id/share_movie_button"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/ic_share"
            android:foreground="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            app:layout_constraintTop_toTopOf="@id/buttons_group"
            app:layout_constraintBottom_toBottomOf="@id/buttons_group"
            app:layout_constraintStart_toEndOf="@+id/watch_later_button"
            app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

答案 1 :(得分:-3)

这真的很有效。 这是什么 ? 安全警告:您正在从Windows针对非Windows Docker主机构建Docker映像。添加到构建上下文的所有文件和目录将具有“ -rwxr-xr-x”权限。建议仔细检查并重置敏感文件和目录的权限。