如何將檔案從主機複製到 Docker 容器?
如果您正在執行一個 Docker 容器,並且想要將檔案從主機複製到 Docker 容器中,有幾種方法可以實現。一種方法是在 Dockerfile 中使用 ADD 或 COPY 指令,並在啟動容器時傳入您想要包含在容器中的檔案的路徑。但是,如果您已經運行了一個容器,該怎麼辦呢?為了僅僅包含一個小檔案而一遍遍地構建相同的映象是不可行的。
為了避免這種情況,Docker 提供了幾種不同的方法和命令,以便在從映象建立容器後,將檔案從主機複製到容器。在本文中,我們將討論不同的方法。讓我們檢查一下每種方法。
方法 1. 使用 Docker cp 命令
Docker cp 命令可以用來將檔案和目錄從主機複製到容器,反之亦然。要將單個檔案從主機複製到容器,可以使用以下命令。
$ docker cp file.txt container-name:/path/to/copy/file.txt
您也可以使用容器 ID。要查詢容器的名稱或 ID,您可以列出所有容器。
$ docker ps -a
如果要將主機中資料夾中的多個檔案複製到容器,可以使用以下命令。
$ docker cp src/directory/. container-name:/target/directory/location
方法 2. 掛載主機目錄
將檔案從主機複製到容器的另一種方法是在建立容器時將主機上的目錄掛載到 Docker 容器。這樣,您可以透過將檔案複製到主機上的掛載資料夾來直接複製任何檔案或目錄。讓我們看看如何操作。
$ docker run -d -v /path/to/directory/in/host:/mount --name=<container-name> <image name>
您可以在主機上執行此命令來執行容器,並使用 -v 選項將主機上的目錄掛載到容器。您在此目錄中複製的任何檔案都可以在容器內的掛載目錄中訪問。
現在,讓我們嘗試透過使用 Docker exec 命令執行 bash 命令來訪問容器的 bash。
$ docker exec -it <container-name> bash
現在您可以訪問容器的 bash 了,您可以執行以下命令來複制檔案。
$ cp /mnt/sourcefile /path/to/destfile
方法 3. 使用 cat 命令
在建立容器時複製檔案的另一種相當簡單的方法是使用 cat 命令作為 Docker run 命令的引數。
$ docker run -i ubuntu /bin/bash -c 'cat > filetobecopied' < filetobecopied
如果您已經運行了 Docker 容器,則可以使用 Docker exec 命令和相同的 cat 命令。
$ docker exec -it <container-name> bash -c 'cat > /path/to/docker-container/file.txt' < /path/to/host-machine/file.txt
方法 4. 使用 tar 命令
您還可以使用 tar 命令將檔案轉換為 tarball 檔案,並將其與 Docker exec 命令一起使用管道傳輸。以下命令將 file.txt 檔案複製到容器內的 /usr 目錄。
$ tar -c file.txt | docker exec -i docker-container /bin/tar -C /usr -x
總而言之,在本文中,我們討論了四種將檔案從主機複製到 Docker 容器的不同方法。我們瞭解瞭如何將檔案從主機複製到正在執行的容器以及尚未建立的容器。我們使用了 Docker cp、Docker exec 等工具來完成此任務。最好的方法是使用傳統的 Docker cp 命令。根據您的需求和用例,您可以選擇最佳方法來複制檔案。