在Docker容器和主機之間複製檔案/資料夾

霍格沃兹测试开发学社發表於2024-03-13

簡介

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_PATHDEST_PATHdocker cp命令關鍵的部分,路徑是否正確關係到命令能否執行成功,下面我們來分析這兩個路徑的各種情況,並說明各種情況下是否能成功複製。

SRC_PATH 指定一個檔案時

  1. DEST_PATH 不存在

建立 DEST_PATH 所需的資料夾,檔案正常儲存到 DEST_PATH

  1. DEST_PATH 不存在,並以 / 結尾

命令將報錯,目標目錄必須存在

  1. DEST_PATH 存在並且是一個檔案

目標被原始檔的內容覆蓋

  1. DEST_PATH 存在並且是目錄

使用 SRC_PATH 中的基本名稱將檔案複製到此目錄中

SRC_PATH指定目錄

  1. DEST_PATH存在並且是目錄時,複製將正常複製
  • SRC_PATH 不以 /. 結尾,源目錄複製到此目錄
  • SRC_PATH 以 /. 結尾,源目錄的內容被複制到該目錄中
  1. DEST_PATH存在並且是一個檔案時,複製將報錯,因為無法將目錄複製到檔案中

  2. DEST_PATH 不存在時,將新建立 DEST_PATH 為路徑的目錄,並將源目錄的內容複製到該目錄中

使用示例

從容器複製檔案到主機

  1. 主機目錄已存在

我們要將tomcat_mullerusr/local/tomcat/README.md檔案複製到主機的study目錄下,命令如下:

docker cp tomcat_muller:usr/local/tomcat/README.md ./

執行命令,結果如下圖,成功複製到指定目錄下:

  1. 主機目錄不存在,不以/結尾

我們要將tomcat_mullerusr/local/tomcat/README.md檔案複製到主機的study/test目錄下,命令如下:

docker cp tomcat_muller:usr/local/tomcat/README.md ./test

執行命令,結果如下圖,我們成功在study目錄下建立了test目錄,並且檔案成功複製到了指定目錄下

  1. 主機目錄不存在,並且以/結尾

我們要將tomcat_mullerusr/local/tomcat/README.md檔案複製到主機的study/test/路徑下,命令如下:

docker cp tomcat_muller:usr/local/tomcat/README.md ./test/

執行命令,結果如下圖,因為路徑不存在,所以會報錯,沒有這個目錄

  1. 複製到已經存在的檔案中
docker cp tomcat_muller:usr/local/tomcat/README.md test.txt

執行命令,結果如下:

複製目錄的操作與複製檔案的類似,這裡不做贅述。

從主機複製檔案到容器

我們要將主機study下的test.txt檔案複製到容器中,命令如下:

docker cp test.txt tomcat_muller:/

執行命令,結果如下圖:

從主機複製目錄到容器

  1. 目標目錄不存在

我們要將主機的study/hogwarts目錄複製到容器的test目錄中,命令如下:

docker cp hogwarts tomcat_muller:test/

執行命令,結果如下圖:

  1. 目標目錄為一個檔案

我們要將主機的study/hogwarts目錄複製到容器的muller中,命令如下:

docker cp hogwarts tomcat_muller:muller/
  1. 目錄已存在

我們要將主機的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環境中進行檔案操作和共享。

相關文章