如何在主机和Docker容器之间复制文件

时间:2020-03-05 15:26:33  来源:igfitidea点击:

Docker CP命令是一个方便的实用程序,允许复制容器和主机系统之间的文件和文件夹。

如果要将文件从主机系统复制到容器,则应使用这样的Docker CP命令:

docker cp host_source_path container:destination_path

如果要将文件从容器复制到主机系统,请使用此命令:

docker cp container:source_path host_destination_path

这可能看起来有点恐吓,所以让我通过一些实际的例子向我们解释。

Docker CP命令示例

在我的教程中,我在Ubuntu上安装了Docker。

但所有运行Docker的分发的步骤都是相同的。

我希望你知道如何运行Docker容器,因为你需要一个正在运行的容器。

首先使用Docker PS命令列出运行容器:

Hyman@theitroad:~$sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8353c6f43fba        775349758637        "bash"              8 seconds ago       Up 7 seconds                            ubu_container

我们需要知道容器ID或者容器名称。
在我的情况下,Docker容器名称是UBU_Container。
并且容器ID为8353C6F43FBA。

如果要验证文件已成功复制,则可以按以下方式输入容器,然后使用常规Linux命令:

docker exec -it ubu_container bash

1.将文件从主机系统复制到Docker容器

使用Docker CP复制类似于Linux中的Copy命令。

我要将名为A.Py的文件复制到容器中的Home/dir1目录。

docker cp a.py ubu_container:/home/dir1

如果文件已成功复制,则不会在屏幕上看到任何输出。
如果目标路径不存在,则会看到错误:

Hyman@theitroad:~$sudo docker cp a.txt ubu_container:/home/dir2/subsub
Error: No such container:path: ubu_container:/home/dir2

如果目标文件已存在,则会在没有任何警告的情况下覆盖它。

我们也可以使用容器ID而不是容器名称:

docker cp a.py 8353c6f43fba:/home/dir1

2.将文件从Docker容器复制到主机系统

Docker CP命令仅在主机系统中运行。
我们无法在容器中运行它。

即使我们要将文件复制到Docker容器到主机系统,我们也需要在主机系统中并以下列方式使用命令:

sudo docker cp ubu_container:/home/dir1/new.txt  /home/igi

3.复制容器和主机系统之间的目录

如果要使用CP命令复制Linux中的目录,则必须使用递归选项-r。

但在Docker CP命令中,我们无需这样的选项。

同样的命令用于复制两个文件和文件夹。

docker cp /home/igi/my_dir ubu_container:/home
sudo docker cp ubu_container:/home/my_dir  /home/igi

4.使用原始属性复制文件和目录

使用选项-a复制时,可以使用存档模式。
有了这个,我们可以复制原始文件的所有文件权限,UID和GID。

docker cp -a host_source_path container:destination_path
docker cp -a container:source_path host_destination_path