将文件从 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 nhooo" > nhooo.txt

您可以通过列出文件并使用 cat 命令列出内容来验证文件的创建。

# ls
# cat nhooo.txt

现在,打开另一个终端。您可以保持此容器运行或退出。在新的终端中,让我们执行 Docker cp 命令将nhooo.txt文件从 ubuntu 容器复制到主机。

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

在上面的 Docker cp 命令中,我们指定了容器的名称和容器内文件的路径,以冒号分隔。我们还指定了主机内部的目标路径。执行此命令后,文件将被复制到目标路径。

最后的想法!

有多种方法可以将文件从 Docker 容器复制到主机。您可以使用挂载的卷、将图像保存为 tarball 文件以及各种其他技术。但是如果要复制小文件或目录,最好的方法是使用 Docker cp 命令。它非常快速且易于使用。除了一些重要的系统文件,你可以从容器中复制任何文件或目录。

在本文中,我们讨论了如何使用 Docker cp 命令以及它的语法和一个完整的端到端示例来执行此操作。

猜你喜欢