之前的文章里介绍了 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
Latest posts by 2222 (see all)

骁龙 8cx 的 Windows 11 on ARM 体验

去年底的时候写过一篇在 MacBook 上体验 ARM 版 Windows 11 的文章,大概写了点日常软件的体验,总体结论是体验尚可,不过转译效率捉急。 虽然在前文结尾...

阅读全文

RTL9210 硬盘盒开箱及固件更新

前几天运气不错,抢到个 399 的爱国者 1T 固态,不过电脑上是早就没啥空余盘位了,还是继续当移动硬盘吧。狗东看了一圈,发现海康的硬盘盒非常便宜,79 块钱...

阅读全文

移动宽带更换 CM113-Z 光猫为华为 MA5671

先把结论放在前面:本人所在地区为江苏常州移动,不绑定 MAC 地址,只需要修改新猫的 SN,填上认证的 password 即可。 换新光猫的配置其实非常简单,最大...

阅读全文

1 条评论