写点什么

Docker cp 命令详解:在 Docker 容器和主机之间复制文件 / 文件夹

  • 2024-03-11
    北京
  • 本文字数:1809 字

    阅读完需:约 6 分钟

简介

Docker 是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用 Docker 时,常常需要在 Docker 容器和主机之间进行文件的复制和共享。Docker 提供了一个名为docker cp的命令,可以轻松地在容器和主机之间复制文件和目录。本文将详细介绍docker cp命令的使用方法和常见示例。


获取更多技术资料,请点击!

docker cp 命令

docker cp命令是 Docker 提供的一个用于在主机和容器之间复制文件和目录的命令。它的语法如下:


docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATHdocker 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 环境中进行文件操作和共享。

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
Docker cp命令详解:在Docker容器和主机之间复制文件/文件夹_霍格沃兹测试开发学社_InfoQ写作社区