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 指定一个文件时
- 当
DEST_PATH
不存在
创建 DEST_PATH
所需的文件夹,文件正常保存到 DEST_PATH
中
- 当
DEST_PATH
不存在,并以 / 结尾
命令将报错,目标目录必须存在
- 当
DEST_PATH
存在并且是一个文件
目标被源文件的内容覆盖
- 当
DEST_PATH
存在并且是目录
使用 SRC_PATH
中的基本名称将文件复制到此目录中
SRC_PATH指定目录
- 当
DEST_PATH
存在并且是目录时,复制将正常复制
- SRC_PATH 不以 /. 结尾,源目录复制到此目录
- SRC_PATH 以 /. 结尾,源目录的内容被复制到该目录中
当
DEST_PATH
存在并且是一个文件时,复制将报错,因为无法将目录复制到文件中当
DEST_PATH
不存在时,将新创建DEST_PATH
为路径的目录,并将源目录的内容复制到该目录中
使用示例
从容器复制文件到主机
- 主机目录已存在
我们要将tomcat_muller
的usr/local/tomcat/README.md
文件复制到主机的study
目录下,命令如下:
docker cp tomcat_muller:usr/local/tomcat/README.md ./
运行命令,结果如下图,成功复制到指定目录下:
- 主机目录不存在,不以
/
结尾
我们要将tomcat_muller
的usr/local/tomcat/README.md
文件复制到主机的study/test
目录下,命令如下:
docker cp tomcat_muller:usr/local/tomcat/README.md ./test
运行命令,结果如下图,我们成功在study
目录下创建了test
目录,并且文件成功复制到了指定目录下
- 主机目录不存在,并且以
/
结尾
我们要将tomcat_muller
的usr/local/tomcat/README.md
文件复制到主机的study/test/
路径下,命令如下:
docker cp tomcat_muller:usr/local/tomcat/README.md ./test/
运行命令,结果如下图,因为路径不存在,所以会报错,没有这个目录
- 复制到已经存在的文件中
docker cp tomcat_muller:usr/local/tomcat/README.md test.txt
运行命令,结果如下:
复制目录的操作与复制文件的类似,这里不做赘述。
从主机复制文件到容器
我们要将主机study
下的test.txt
文件复制到容器中,命令如下:
docker cp test.txt tomcat_muller:/
运行命令,结果如下图:
从主机复制目录到容器
- 目标目录不存在
我们要将主机的study/hogwarts
目录复制到容器的test
目录中,命令如下:
docker cp hogwarts tomcat_muller:test/
运行命令,结果如下图:
- 目标目录为一个文件
我们要将主机的study/hogwarts
目录复制到容器的muller
中,命令如下:
docker cp hogwarts tomcat_muller:muller/
- 目录已存在
我们要将主机的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环境中进行文件操作和共享。
到此这篇关于Docker cp命令详解之如何在Docker容器和主机之间复制文件/文件夹的文章就介绍到这了,更多相关Docker容器和主机复制文件/文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!