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>
不存在,則會在其路徑中建立所有缺少的目錄。