從 Docker 容器複製檔案到主機


我們可以使用 Docker build 命令來使用構建上下文構建 Docker 映象。構建上下文包含建立容器化應用程式環境所需的所有檔案。這包括用於構建 Docker 映象的 Dockerfile、應用程式的原始碼、Dockerignore 檔案,以及您希望在執行容器時預先存在的容器中的所有檔案和目錄。

但是,您可能希望將某些檔案從容器複製到主機。例如,如果您正在 Docker 容器內處理應用程式,並且您在容器內生成了某些日誌檔案或輸出。您可能希望與您的團隊共享結果。在這種情況下,您需要從容器訪問這些檔案到主機。

有兩種方法可以做到這一點。第一種是在主機上將目錄掛載為卷。但是,對於共享簡單檔案或目錄,建立卷可能沒有必要。第二種方法是使用 Docker cp 命令將檔案從 Docker 容器複製到主機。讓我們討論一下如何做到這一點。

Docker cp 命令

我們可以使用 Docker cp 命令將檔案和目錄從源路徑複製到目標路徑。我們可以使用此命令將檔案從本地機器複製到 Docker 容器,反之亦然。參與此過程的容器可以是停止的或正在執行的。預設情況下,Docker cp 命令將假定容器內提到的所有路徑都相對於容器的根目錄(/)。

這意味著即使我們不提供正斜槓,它也是可選的。因此,路徑 /user/app/folder1 和 user/app/folder1 是相同的。但是,我們為本地機器指定的路徑可以是相對的也可以是絕對的。主機中的路徑相對於當前工作目錄。

我們可以在源和目標路徑中為檔案和目錄指定兩個路徑。將檔案從 Docker 容器複製到主機機的 Docker cp 命令語法為 -

$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

請注意,我們不允許複製某些敏感檔案,例如系統檔案。這些包括 /dev、/proc、/sys、tmpfs 下的資源,以及使用者在容器中建立的某些掛載點。解決此問題的辦法是使用 Docker exec 命令在 Docker 容器內手動執行 tar 命令。

讓我們檢視一個示例,在 Docker 容器內建立一個檔案,在其中包含一些內容,並使用 Docker cp 命令將其複製到主機。

首先,讓我們建立一個 Ubuntu 容器並訪問其 bash。

$ docker run -it --name=myubuntu ubuntu bash

在上面的命令中,我們使用了 Docker run 命令來拉取並執行一個 Ubuntu 容器。我們使用了 i(互動式)和 t(偽 TTY)選項以及 Docker run 命令以互動模式訪問容器。接下來,我們指定了映象名稱和我們需要執行的命令,即 bash 命令,因為我們希望訪問容器環境。

現在我們已經可以訪問容器的 bash 了,我們可以使用 echo 命令在容器內建立一個包含一些內容的檔案。

# echo "Welcome to TutorialsPoint" > TutorialsPoint.txt

您可以透過列出檔案並使用 cat 命令列出內容來驗證檔案的建立。

# ls
# cat TutorialsPoint.txt

現在,開啟另一個終端。您可以讓此容器繼續執行或退出。在新終端中,讓我們執行 Docker cp 命令將 TutorialsPoint.txt 檔案從 ubuntu 容器複製到主機。

$ docker cp myubuntu:TutorialsPoint.txt /home/user/Desktop/

在上面的 Docker cp 命令中,我們指定了容器的名稱和容器內檔案的路徑,用冒號分隔。我們還指定了主機中的目標路徑。執行此命令後,檔案將被複制到目標路徑。

最終想法!

有多種方法可以將檔案從 Docker 容器複製到主機。您可以使用掛載的卷、將映象儲存為 tarball 檔案,以及各種其他技術。但是,如果您想複製小型檔案或目錄,最好的方法是使用 Docker cp 命令。它非常快且易於使用。除了某些重要的系統檔案外,您可以從容器複製任何檔案或目錄。

在本文中,我們討論瞭如何使用 Docker cp 命令以及它的語法和完整的端到端示例。

更新於: 2021年8月6日

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告