之前的文章里介绍了 Docker 的基本操作,再来水一篇文章说说怎么对容器里的文件进行管理。

Docker 容器虽然类似虚拟机,但如果想要物理机和容器内系统进行文件传输时,还是有点区别的。

如果只是单纯对容器内的系统进行本地文件管理的话,那么用 docker exec 这类命令直接进入容器内部,用常规命令行进行管理即可。

但很多时候都是突然遇到某个需求,需要外部物理机向容器内部拷贝文件,或者容器里的文件拷贝出来,而 Docker 的缺点就是容器一旦创建后,再修改参数比较麻烦,而创建时显然不可能预估到后续所有需求,提前映射所有目录啥的。

好在 Docker 本身就提供了对应的文件传输命令,那就是 copy 和 add 指令,这两个指令用法相似但又存在部分不同。

copy 命令顾名思义,是基础的指令,可以用于容器和外界物理机之间拷贝文件,命令格式视不同目标,可以有多种组合:

docker cp 容器 ID 或名称: 容器目录 物理机目录

docker cp 物理机目录 容器 ID 或名称: 容器目录

比如创建了一个镜像,容器 ID 为 b2860e937844。

样本容器

比如想将物理机的/home/lishuma 目录拷贝到容器的/home 目录下,那么就运行:

docker cp /home/lishuma b2860e937844:/home/

运行后进入容器查看对应目录,可以看到了对应的 lishuma 目录:

复制进去的对应目录

如果是把上一条命令结尾斜杠去掉,那么意思就变成了将物理机/home/lishuma 目录拷贝到容器根目录中,并且拷贝进去的目录重命名为 home。

接着反过来,如果要将容器 b2860e937844 的/home/lishuma 目录(里面有一个 test.zip 文件)拷贝到物理机的/home/lishuma/test 目录中,那么命令格式为:

docker cp 容器 ID 或名称: 容器目录 物理机目录

运行:

docker cp b2860e937844:/home/lishuma /home/lishuma/test/

运行后可以看到物理机对应目录下出现了所需的目录:

容器文件对外拷贝

和上面一样,反过来容器向外拷贝的命令如果去掉最后一个斜杠,那么意思同样是变成拷贝出来后,重命名为 test。

注意事项:

  • 如果源路径是个文件,且目标路径是以 / 结尾, 则 docker 会把目标路径当作一个目录,会把源文件拷贝到该目录下(如果不存在则自动创建)。
  • 如果目标文件是个存在的文件,会被源文件覆盖,文件名则为目标文件名。

Docker 文件交互的另一个命令为 add,简单来说就是 copy 命令的进阶版,用法完全一样,但 add 有两个特殊功能,可以传输后自动解压压缩包,以及从 url 地址下载文件(不过下载文件这用法官方文档里不推荐使用)。

2222

站长 at 梨数码
我要是有钱多好~
2222

Latest posts by 2222 (see all)

Docker 中安装 Rocket.Chat 聊天程序

Rocket.Chat 是一个在线实时聊天程序,功能完善,而且各个操作系统平台均有对应的客户端程序,本文说明一下在 Docker 中的安装方法,有兴趣的可以参考研...

阅读全文

通俗易懂的 Docker 简单入门

前一段时间里,为了研究 HomeAssistant ,因此接触了一下 Docker,本文来尽量用通俗易懂的语言总结一下 Docker 的基本使用操作,算是个人日常备忘和新手...

阅读全文

斐讯 DC1 插排接入 HomeAssistant 实现本地局域网内控制

本文可以配合上一篇教程一起食用:Debian10 配置 Docker,并安装 HomeAssistant 在 NAS 上配置完 HA 服务器后,接着就需要来把这 DC1 插排的默认连接域名...

阅读全文

欢迎留言