docker cp命令复制SRC_PATH的内容到DEST_PATH。可以从容器文件系统复制文件到本地机器或是反过来,从本地文件系统复制文件到容器。如果SRC_PATH或DEST_PATH指定了破折号-,可以从STDIN读取tar归档文件或输出到STDOUT。容器可以是运行或停止状态。SRC_PATH或DEST_PATH可以是文件或目录。
docker cp命令假设容器paths是相对于容器的根目录的。这意味着初始的左斜杠是可选的;compassionate_darwin:/tmp/foo/myfile.txt和compassionate_darwin:tmp/foo/myfile.txt是一样的。本地机器paths可以是一个绝对的或相对的值。这个命令解析本地机器的相对路径为相对于docker cp运行的当前目录。
cp命令行为像Unix cp -a命令,递归复制目录及其权限。文件的所有者设置为目标的用户和主用户组。例如,复制到容器的文件以root用户UID:GID创建。复制到本地机器的文件以调用docker cp命令的用户的UID:GID创建。如果指定-L选项,docker cp则跟随在SRC_PATH的软链接。docker cp不会创建DEST_PATH父级目录。
假设路径分隔符为/,第一个参数为SRC_PATH,第二个为DEST_PATH,它们的行为如下:
SRC_PATH
指定的是一个文件
DEST_PATH
不存在
DEST_PATH
文件DEST_PATH
不存在且以/
结尾
DEST_PATH
存在且是一个文件
DEST_PATH
存在且是一个目录
SRC_PATH
SRC_PATH
指定的是一个目录
DEST_PATH
不存在
DEST_PATH
这个目录,然后源目录的内容复制到这个目录DEST_PATH
存在且是一个文件
DEST_PATH
存在且是一个目录
SRC_PATH
不以/
结尾
SRC_PATH
以/
结尾
根据以上规则,命令要求SRC_PATH和DEST_PATH都存在。如果SRC_PATH是本地的软链接,默认下只复制软链接,不复制它指向的文件。要跟随这个软链接,指定-L选项。:冒号用来分隔CONTAINER和它的路径。