COPY 指令

COPY 有兩種形式:

COPY <src>... <dest>
COPY ["<src>",... "<dest>"] (this form is required for paths containing whitespace)

COPY 指令從 <src> 複製新檔案或目錄,並將它們新增到路徑 <dest> 的容器的檔案系統中。

可以指定多個 <src> 資源,但它們必須相對於正在構建的源目錄(構建的上下文)。

每個 <src> 可能包含萬用字元,匹配將使用 Go 的 filepath.Match 規則完成。例如:

COPY hom* /mydir/        # adds all files starting with "hom"
COPY hom?.txt /mydir/    # ? is replaced with any single character, e.g., "home.txt"

<dest> 是絕對路徑,或相對於 WORKDIR 的路徑,源將被複制到目標容器中。

COPY test relativeDir/   # adds "test" to `WORKDIR`/relativeDir/
COPY test /absoluteDir/  # adds "test" to /absoluteDir/

使用 UID 和 GID 為 0 建立所有新檔案和目錄。

注意:如果使用 stdin(docker build - < somefile)構建,則沒有構建上下文,因此無法使用 COPY

COPY 遵守以下規則:

  • <src> 路徑必須位於構建的上下文中; 你不能知道 14 ../something / something,因為 docker 構建的第一步是將上下文目錄(和子目錄)傳送到 docker 守護程序。

  • 如果 <src> 是目錄,則複製目錄的全部內容,包括檔案系統後設資料。注意:不復制目錄本身,只複製其內容。

  • 如果 <src> 是任何其他型別的檔案,它將與其後設資料一起單獨複製。在這種情況下,如果 <dest> 以尾部斜槓/結束,則它將被視為目錄,<src> 的內容將在 <dest>/base(<src>) 中寫入。

  • 如果直接或由於使用萬用字元指定了多個 <src> 資源,則 <dest> 必須是目錄,並且必須以斜槓/結尾。

  • 如果 <dest> 沒有以斜槓結尾,則它將被視為常規檔案,<src> 的內容將在 <dest> 中寫入。

  • 如果 <dest> 不存在,則會在其路徑中建立所有缺少的目錄。