将文件从 Docker 容器复制到主机
我们可以使用 Docker 构建命令,通过构建上下文构建 Docker 镜像。构建上下文包含创建容器化应用程序环境所需的所有文件。这包括用于构建 Docker 镜像的 Dockerfile、应用程序的源代码、Dockerignore 文件以及您希望在容器运行时预先存在于容器中的所有文件和目录。
但是,您经常需要将一些文件从容器复制到主机。例如,如果您正在 Docker 容器内开发应用程序,并且在容器内生成了一些日志文件或输出。您可能希望与团队共享这些结果。在这种情况下,您需要获得从容器到主机对这些文件的访问权限。
有两种方法可以做到这一点。第一种方法是将主机上的目录作为卷挂载。但是,对于共享简单的文件或目录,可能不需要创建卷。第二种方法是使用 Docker cp 命令将文件从 Docker 容器复制到主机。我们来讨论一下如何操作。
Docker cp 命令
我们可以使用 Docker cp 命令将文件和目录从源路径复制到目标路径。我们可以使用此命令将文件从本地计算机复制到 Docker 容器,反之亦然。参与此过程的容器可以处于停止状态,也可以处于运行状态。默认情况下,Docker cp 命令会假定容器内提到的所有路径都是相对于容器根目录 (/) 的。
这意味着即使我们不提供正斜杠,它也是可选的。因此,路径 /user/app/folder1 和 user/app/folder1 是相同的。但是,我们为本地计算机指定的路径可以是相对路径,也可以是绝对路径。主机中的路径是相对于当前工作目录的。
我们可以在源路径和目标路径中同时指定文件和目录的路径。Docker cp 命令用于将文件从 Docker 容器复制到主机的语法为 -
$ 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(伪终端)选项以及 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 命令执行此操作,以及它的语法和完整的端到端示例。

