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

简介

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

docker cp命令

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

复制代码
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker 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_PATH和DEST_PATH是docker 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_muller的usr/local/tomcat/README.md文件复制到主机的study目录下,命令如下:

复制代码
docker cp tomcat_muller:usr/local/tomcat/README.md ./

运行命令,结果如下图,成功复制到指定目录下:

  1. 主机目录不存在,不以/结尾

我们要将tomcat_muller的usr/local/tomcat/README.md文件复制到主机的study/test目录下,命令如下:

复制代码
docker cp tomcat_muller:usr/local/tomcat/README.md ./test

运行命令,结果如下图,我们成功在study目录下创建了test目录,并且文件成功复制到了指定目录下

  1. 主机目录不存在,并且以/结尾

我们要将tomcat_muller的usr/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环境中进行文件操作和共享。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
西木莉3 小时前
非互联网与互联网数据平台的差异
程序人生
YH行业报告分析3 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
Wang's Blog4 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
ajassi20004 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎4 小时前
linux 进程信号(下)
linux·运维·服务器
Mikko74 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋4 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm4 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
AIGC大时代4 小时前
LLM Agent 执行沙箱闸门:失败含义与当天最小实验
docker·沙箱·闸门·bubblewrap·llm agent
Liuqy-055 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器