簡介
Docker是一種流行的容器化平臺,它允許開發人員在獨立、可移植的環境中構建、打包和部署應用程式。在使用Docker時,常常需要在Docker容器和主機之間進行檔案的複製和共享。Docker提供了一個名為docker cp
的命令,可以輕鬆地在容器和主機之間複製檔案和目錄。本文將詳細介紹docker cp
命令的使用方法和常見示例。
docker cp命令
docker cp
命令是Docker提供的一個用於在主機和容器之間複製檔案和目錄的命令。它的語法如下:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
CONTAINER
,可以是正在執行或已停止的容器,名稱或ID均可SRC_PATH
,原始檔或目錄在容器內的路徑DEST_PATH
,目標路徑在主機上的位置
注:docker cp
命令會假定容器路徑相對於容器的 /(根)目錄,主機路徑則是相對於執行 docker cp 命令的當前目錄
options可用引數
-a
:將複製的檔案或目錄保留其原始屬性,包括所有者、許可權等。-L
:如果SRC_PATH是一個符號連結,則複製連結指向的檔案或目錄。-p
:保留原始檔或目錄的時間戳。-R
或-r
:遞迴複製整個目錄。
SRC_PATH & DEST_PATH
SRC_PATH
和DEST_PATH
是docker cp
命令關鍵的部分,路徑是否正確關係到命令能否執行成功,下面我們來分析這兩個路徑的各種情況,並說明各種情況下是否能成功複製。
SRC_PATH 指定一個檔案時
- 當
DEST_PATH
不存在
建立 DEST_PATH
所需的資料夾,檔案正常儲存到 DEST_PATH
中
- 當
DEST_PATH
不存在,並以 / 結尾
命令將報錯,目標目錄必須存在
- 當
DEST_PATH
存在並且是一個檔案
目標被原始檔的內容覆蓋
- 當
DEST_PATH
存在並且是目錄
使用 SRC_PATH
中的基本名稱將檔案複製到此目錄中
SRC_PATH指定目錄
- 當
DEST_PATH
存在並且是目錄時,複製將正常複製
- SRC_PATH 不以 /. 結尾,源目錄複製到此目錄
- SRC_PATH 以 /. 結尾,源目錄的內容被複制到該目錄中
-
當
DEST_PATH
存在並且是一個檔案時,複製將報錯,因為無法將目錄複製到檔案中 -
當
DEST_PATH
不存在時,將新建立DEST_PATH
為路徑的目錄,並將源目錄的內容複製到該目錄中
使用示例
從容器複製檔案到主機
- 主機目錄已存在
我們要將tomcat_muller
的usr/local/tomcat/README.md
檔案複製到主機的study
目錄下,命令如下:
docker cp tomcat_muller:usr/local/tomcat/README.md ./
執行命令,結果如下圖,成功複製到指定目錄下:
- 主機目錄不存在,不以
/
結尾
我們要將tomcat_muller
的usr/local/tomcat/README.md
檔案複製到主機的study/test
目錄下,命令如下:
docker cp tomcat_muller:usr/local/tomcat/README.md ./test
執行命令,結果如下圖,我們成功在study
目錄下建立了test
目錄,並且檔案成功複製到了指定目錄下
- 主機目錄不存在,並且以
/
結尾
我們要將tomcat_muller
的usr/local/tomcat/README.md
檔案複製到主機的study/test/
路徑下,命令如下:
docker cp tomcat_muller:usr/local/tomcat/README.md ./test/
執行命令,結果如下圖,因為路徑不存在,所以會報錯,沒有這個目錄
- 複製到已經存在的檔案中
docker cp tomcat_muller:usr/local/tomcat/README.md test.txt
執行命令,結果如下:
複製目錄的操作與複製檔案的類似,這裡不做贅述。
從主機複製檔案到容器
我們要將主機study
下的test.txt
檔案複製到容器中,命令如下:
docker cp test.txt tomcat_muller:/
執行命令,結果如下圖:
從主機複製目錄到容器
- 目標目錄不存在
我們要將主機的study/hogwarts
目錄複製到容器的test
目錄中,命令如下:
docker cp hogwarts tomcat_muller:test/
執行命令,結果如下圖:
- 目標目錄為一個檔案
我們要將主機的study/hogwarts
目錄複製到容器的muller
中,命令如下:
docker cp hogwarts tomcat_muller:muller/
- 目錄已存在
我們要將主機的study/hogwarts
目錄複製到容器的/hogwarts
中,命令如下:
docker cp hogwarts tomcat_muller:/hogwarts/
執行命令結果如下:
從容器複製目錄到主機
我們將tomcat_muller
容器中的webapps.dist
目錄複製到主機的usr/local/study
中,命令如下:
docker cp tomcat_muller:/usr/local/tomcat/webapps.dist /home/muller/study
執行命令,結果如下圖:
總結
docker cp
命令是在Docker容器和主機之間複製檔案和目錄的便捷工具。透過簡單的命令和引數,我們可以輕鬆地在容器和主機之間傳輸檔案。本文介紹了docker cp
命令的語法和常見選項,並提供了幾個示例以幫助大家更好地理解其用法。透過靈活使用docker cp
命令,我們可以輕鬆地在Docker環境中進行檔案操作和共享。