首页 > 其他分享 >在Docker容器和主机之间复制文件/文件夹

在Docker容器和主机之间复制文件/文件夹

时间:2024-03-13 18:33:45浏览次数:16  
标签:docker tomcat 主机 文件夹 PATH Docker cp 目录

简介

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_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环境中进行文件操作和共享。

标签:docker,tomcat,主机,文件夹,PATH,Docker,cp,目录
From: https://www.cnblogs.com/hogwarts/p/18071288

相关文章

  • 【分享】记一次项目迁移(docker java | docker python)
    项目:前端Vue3,后端Python+Java,数据库Redis+MySQL原先部署在centos7里面的,使用的宝塔面板部署的,还算方便。但是服务器要到期了,要将项目迁移到另外一台服务器。另外一台服务器是opencloudos+1plane本来想构建一个jdk1.8+python3.12+Nodejs环境的镜像奈何本人没学过docker,操作起......
  • docker 制作与使用 arcgisserver 镜像
    PS:有状态服务本身不适合部署到容器中,数据恢复比较困难,生产环境请直接安装到Linux服务器中1.准备内容在同级目录下,准备以下内容空的dockerfile文件:arcgisserver.dockerfilelinux版的ArcGISServer安装包:ArcGIS_Server_Linux_xxxxxx.tar.gzArcGISServer的许可文件:ArcGI......
  • Docker部署运行kkFileView
     kkfileview的预览文件位于容器内/opt/kkFileView-4.1.0/filekkfileview的配置文件位于容器内/opt/kkFileView-4.1.0/config目录可能随着版本号变化,建议先运行之后进去看一下实际的目录(dockerexec-it容器idbash)之后把配置文件拷贝出来,当然如果已有配置文件直接运行映射目......
  • docker_02days
    #镜像 dockerpull名字:标签dockerimagesdockerrmi镜像id---------dockerpush本地镜像#把本地镜像推送到自己仓库#容器:镜像运行起来成为一个个容器,一个容器,就当成是一个虚拟机装了个操作系统 dockerpsdockerps-adockerstop......
  • docker-compose安装minio集群
    一、docker-compose安装minio单机版直接使用docker安装单机版,可用于测试创建.env环境文件MINIO_PASSWORD=minio@123创建docker-compose.yml环境文件version:"3"services:minio:image:minio/miniocontainer_name:minioports:-9000:9000......
  • 【WCH蓝牙系列芯片】-基于CH582开发板—蓝牙主机睡眠模式,串口唤醒收发数据
    -------------------------------------------------------------------------------------------------------------------------------------  在使用蓝牙主机的时候,有时需要通过宏定义开启睡眠模式,从而达到降低芯片的功耗。蓝牙的睡眠是由协议栈自行管理的,在芯片睡眠状态......
  • Docker
    Docker指令Redis容器化命令0下载Redis镜像dockerpullredis1查看正在运行的容器dockerps0创建并运行Redisdockerrun-d-p6379:6379--nameredisredis1启动Redis容器dockerstartredis0启动//客户端启动dockerexec-itredisredis-cli//服务......
  • Docker 笔记(四)--网络
    这篇笔记写的时间很久,记录了Docker的网络知识,概念从浅入深,对docker网络有一个大体介绍,对部分细节做了详细解析,但涉及的知识点太多,未能在一篇中全部罗列,后续逐步完善吧。目录参考环境网络命令1.默认网络2.查看信息2.1查看bridge网络信息2.2查看host网络信息2.3查看......
  • dockerfile多阶段构建镜像
    dockerfile多阶段构建镜像Docker多阶段构建是一种在Dockerfile中使用多个构建阶段来创建镜像的方法。它可以帮助减小最终镜像的大小,并且可以将构建过程分解为多个步骤,提高构建效率。以下是一个使用多阶段构建的示例Dockerfile:#第一阶段:构建应用程序FROMgolang:1.16ASbuilde......
  • 45_docker-compose_mysql8.0
    1.安装Docker-composecurl-L"https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-composechmod+x/usr/local/bin/docker-composeln-s/usr/local/bin/docker-compose/usr/b......