您的位置:

Docker拷贝文件详解

一、从Docker拷贝文件夹到容器

将本地一个目录拷贝到Docker容器的指定目录下,使用命令:

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

其中,[OPTIONS] 是可选的选项,可使用选项 -a 来保持文件属性不变,-L 来跟随符号链接。

SRC_PATH:是源文件或目录的路径,也支持使用 '-' 代表标准输入输出或标准错误输出;

CONTAINER:是目标容器的名称或ID;

DEST_PATH:是指定在容器中的目标文件或目录路径。

例如,将本地 /home/user1/sourcedir 目录拷贝到名为 mycontainer 的 Docker 容器中的 /home/user2/targetdir 目录下,使用命令:

docker cp /home/user1/sourcedir mycontainer:/home/user2/targetdir

二、拷贝文件到Docker容器

将本地的一个文件拷贝到Docker容器中的指定目录下,同样也是使用 docker cp 命令。

例如,将本地的 /home/user1/sourcefile 文件拷贝到名为 mycontainer 的 Docker 容器中的 /home/user2/targetdir 目录下,使用命令:

docker cp /home/user1/sourcefile mycontainer:/home/user2/targetdir

三、Docker拷贝文件到本地

将Docker容器中的一个文件拷贝到本地机器上的指定目录下,使用命令:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

其中,[OPTIONS] 是可选的选项,跟上面一样,可以使用选项 -a 来保持文件属性不变,-L 来跟随符号链接。

CONTAINER:是源容器的名称或ID;

SRC_PATH:是源文件或目录的路径,也支持使用 '-' 代表标准输入输出或标准错误输出;

DEST_PATH:是指定在本地的目标文件或目录路径。

例如,将名为 mycontainer 的 Docker 容器中的 /home/user2/sourcefile 文件拷贝到本地的 /home/user1/targetdir 目录下,使用命令:

docker cp mycontainer:/home/user2/sourcefile /home/user1/targetdir

四、Docker拷贝文件进容器

将文件从一个Docker容器拷贝到另一个Docker容器中,可以使用两次 docker cp 命令,先将源容器的指定文件拷贝到本地,再将本地的文件拷贝到目标容器。例如,将名为 mycontainer1 的 Docker 容器中的文件拷贝到名为 mycontainer2 的 Docker 容器中。 先将名为 mycontainer1 的 Docker 容器中的 /home/user1/sourcefile 文件拷贝到本地的 /home/user1/targetdir 目录下,使用命令:

docker cp mycontainer1:/home/user1/sourcefile /home/user1/targetdir

然后将本地的 /home/user1/targetdir/sourcefile 文件拷贝到名为 mycontainer2 的 Docker 容器中的 /home/user2/targetdir 目录下,使用命令:

docker cp /home/user1/targetdir/sourcefile mycontainer2:/home/user2/targetdir

五、Docker拷贝文件夹

将本地的一个目录拷贝到Docker容器中的指定目录下,和拷贝文件夹一样,使用 docker cp 命令。例如,将本地 /home/user1/sourcedir 目录拷贝到名为 mycontainer 的 Docker 容器中的 /home/user2/targetdir 目录下,使用命令:

docker cp /home/user1/sourcedir mycontainer:/home/user2/targetdir

六、Docker拷贝文件限制

Docker在拷贝文件的时候,有以下几点限制:

1、只能拷贝文件,无法拷贝软链接和目录。因此,如果要拷贝软链接或目录,需要借助 tar 命令来进行打包和解包,再使用 docker cp 命令进行拷贝。

2、不能拷贝到运行中的容器,只能拷贝到已停止的容器。

3、Docker 1.8 及更早版本无法使用 docker cp 命令。可以使用 docker-enter 或 nsenter 工具进入容器后,再使用 cp 命令拷贝文件。

七、Docker拷贝文件到镜像

Docker提供了 docker commit 命令可以将容器新的状态保存为一个镜像,但是不能直接将一个文件添加到镜像中。要将一个文件添加到镜像中,需要在容器中添加该文件,然后再使用 docker commit 命令。

八、Docker拷贝文件到宿主机

将一个文件从Docker容器中拷贝到宿主机上,可以使用 docker cp 命令,如下所示:

docker cp CONTAINER:/CONTAINER_PATH HOST_DEST_PATH

其中 CONTAINER 是 Docker 容器的名称或者ID,CONTAINER_PATH 是Docker 容器中的文件路径,HOST_DEST_PATH 是拷贝文件要保存在宿主机上的路径。

例如,将名为 mycontainer 的 Docker 容器中的 /app/data.txt 文件拷贝到宿主机 /tmp/data.txt 文件中,执行如下命令:

docker cp mycontainer:/app/data.txt /tmp/data.txt

九、Docker拷贝文件命令

使用 Docker 容器来操作文件时,可以参考以下命令:

docker ps -a # 列出所有容器,包括已停止的容器
docker exec -it CONTAINER /bin/bash # 进入 Docker 容器的命令,CONTAINER 为容器名称或ID
cp SOURCE_FILE DEST_FILE # 复制文件,可以使用相对路径或绝对路径

十、Docker拷贝文件时修改权限选项

使用 docker cp 命令拷贝文件时,可以使用 -p 选项来保留文件的权限。例如,将本地的 /home/user1/sourcefile 文件拷贝到名为 mycontainer 的 Docker 容器中的 /home/user2/targetdir 目录下,并保持文件的权限,使用命令:

docker cp -p /home/user1/sourcefile mycontainer:/home/user2/targetdir