Docker 17
引擎: CLI | Engine: CLI

docker cp

docker cp

描述

复制容器和本地文件系统之间的文件/文件夹

用法

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

选项

Name, shorthandDefaultDescription
--archive, -afalseArchive mode (copy all uid/gid information)
--follow-link, -LfalseAlways follow symbol link in SRC_PATH

父命令

命令描述
dockerDocker CLI的基本命令。

扩展描述

docker cp实用程序将内容复制SRC_PATHDEST_PATH。您可以从容器的文件系统复制到本地机器或从本地文件系统复制到容器。如果-SRC_PATHor 指定DEST_PATH,您也可以从一个STDIN或多个流向tar存档STDOUT。该CONTAINER可以是运行或停止容器。该SRC_PATHDEST_PATH可以是文件或目录。

docker cp命令假定容器路径与容器的/(根)目录相关。这意味着提供初始正斜杠是可选的; 该命令看起来compassionate_darwin:/tmp/foo/myfile.txtcompassionate_darwin:tmp/foo/myfile.txt完全相同。本地机器路径可以是绝对值或相对值。该命令将本地机器的相对路径解释为相对于当前运行的工作目录docker cp

cp命令的行为与 Unix cp -a命令类似,即在可能的情况下保留权限时递归复制目录。所有权设置为目标用户和主要组。例如,复制到容器的文件是由UID:GIDroot用户创建的。复制到本地机器的文件是由UID:GID调用该docker cp命令的用户创建的。但是,如果指定了该-a选项,docker cp则将所有权设置为源用户和主组。如果您指定了该-L选项,请docker cp遵循中的任何符号链接SRC_PATHdocker cp没有创建父目录DEST_PATH,如果它们不存在。

假设一个路径分隔符为/,第一个参数SRC_PATH和第二个参数DEST_PATH的行为如下所示:

  • SRC_PATH 指定一个文件

- `DEST_PATH` does not exist and ends with `/` - Error condition: the destination directory must exist.

- `DEST_PATH` exists and is a file - the destination is overwritten with the source file’s contents

- `DEST_PATH` exists and is a directory - the file is copied into this directory using the basename from `SRC_PATH`

  • SRC_PATH 指定一个目录

- `DEST_PATH` exists and is a file - Error condition: cannot copy a directory to a file

- `DEST_PATH` exists and is a directory - `SRC_PATH` does not end with `/.` (that is: _slash_ followed by _dot_) - the source directory is copied into this directory

- `SRC_PATH` does end with `/.` (that is: _slash_ followed by _dot_) - the _content_ of the source directory is copied into this directory

命令需要SRC_PATHDEST_PATH按照上述规则存在。如果SRC_PATH是本地的并且是符号链接,则默认情况下复制符号链接而不是目标。要复制链接目标而不是链接,请指定该-L选项。

冒号(:)用作CONTAINER它和路径之间的分隔符。例如,您也可以:在指定路径到本地机器SRC_PATHDEST_PATH本地机器时使用file:name.txt。如果在本地机器路径中使用: ,则必须使用相对路径或绝对路径进行显式指定,例如:

`/path/to/file:name.txt` or `./file:name.txt`

这是不可能复制某些系统文件,如在资源/proc/sys/dev在容器中的用户创建,tmpfs 的,和坐骑。但是,您仍然可以通过手动运行tar来复制这些文件docker exec。以下两个示例以不同的方式执行相同的操作(考虑SRC_PATH并且DEST_PATH是目录):

$ docker exec foo tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | tar Cxf DEST_PATH -

$ tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i foo tar Cxf DEST_PATH -

使用-作为SRC_PATH流的内容STDIN作为一个 tar 归档。该命令将tar的内容提取到DEST_PATH容器的文件系统中。在这种情况下,DEST_PATH必须指定一个目录。使用-作为DEST_PATH流的资源作为一个tar归档的内容STDOUT