Docker 容器 CP
描述 | 在容器和本地文件系统之间复制文件/文件夹 |
---|---|
用法 | docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH |
别名 | docker cp |
描述
这docker cp
实用程序会将SRC_PATH
到DEST_PATH
.
您可以从容器的文件系统复制到本地计算机或
反向,从本地文件系统到容器。如果为
要么是-
SRC_PATH
或DEST_PATH
,您还可以从STDIN
或STDOUT
.这CONTAINER
可以是正在运行或已停止的容器。
这SRC_PATH
或DEST_PATH
可以是文件或目录。
这docker cp
命令假定容器路径是相对于容器的 (根) 目录的。这意味着提供初始正斜杠是可选的;
命令会看到/
compassionate_darwin:/tmp/foo/myfile.txt
和compassionate_darwin:tmp/foo/myfile.txt
相同。本地计算机路径可以
是绝对值或相对值。该命令将解释本地计算机的
relative paths 作为相对于当前工作目录的docker cp
是
跑。
这cp
命令的行为类似于 Unixcp -a
命令在
递归复制,并尽可能保留权限。所有权设置为
目标的用户和主组。例如,复制到
容器是使用UID:GID
root 用户的 root 用户。将文件复制到本地
machine 是使用UID:GID
调用了docker cp
命令。但是,如果指定-a
选择docker cp
设置所有权
到源中的用户和主组。
如果指定-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
存在,并且是一个目录- 该文件将使用 basename 从
SRC_PATH
- 该文件将使用 basename 从
SRC_PATH
指定目录DEST_PATH
不存在DEST_PATH
创建为目录,源的内容 目录复制到此目录中
DEST_PATH
存在且是一个文件- 错误条件:无法将目录复制到文件
DEST_PATH
存在,并且是一个目录SRC_PATH
不以/.
(即:斜杠后跟点)- 源目录将复制到此目录中
SRC_PATH
结尾为/.
(即:斜杠后跟点)- 源目录的内容将复制到此 目录
该命令需要SRC_PATH
和DEST_PATH
根据上述内容存在
规则。如果SRC_PATH
是本地的,并且是符号链接,则符号链接不是
默认情况下,将复制目标。要复制链接目标而不是链接,请指定
这-L
选择。
冒号 (:
) 用作CONTAINER
及其路径。您可以
也使用:
当指定SRC_PATH
或DEST_PATH
在本地
machine 等file:name.txt
.如果您使用:
在本地计算机路径中,
您必须明确使用相对或绝对路径,例如:
`/path/to/file:name.txt` or `./file:name.txt`
选项
选择 | 违约 | 描述 |
---|---|---|
-a, --archive | 存档模式(复制所有 uid/gid 信息) | |
-L, --follow-link | 始终遵循 SRC_PATH 中的元件链接 | |
-q, --quiet | 在复制期间禁止显示进度输出。如果未连接端子,则会自动抑制进度输出 |
例子
将本地文件复制到容器中
$ docker cp ./some_file CONTAINER:/work
将文件从容器复制到本地路径
$ docker cp CONTAINER:/var/logs/ /tmp/app_logs
将文件从容器复制到 stdout。注意cp
命令生成 tar 流
$ docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"
极端情况
无法复制某些系统文件,例如/proc
,/sys
,/dev
、tmpfs 和 mounts 创建的
容器中的用户。但是,您仍然可以手动复制此类文件
运行tar
在docker exec
.以下两个示例执行相同的作
以不同的方式(考虑SRC_PATH
和DEST_PATH
是目录):
$ docker exec CONTAINER tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | tar Cxf DEST_PATH -
$ tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i CONTAINER tar Cxf DEST_PATH -
用作-
SRC_PATH
流式传输STDIN
作为 tar 存档。
该命令将 tar 的内容提取到DEST_PATH
在容器的
文件系统。在这种情况下,DEST_PATH
必须指定一个目录。使用 as
这-
DEST_PATH
将资源的内容作为 tar 存档流式传输到STDOUT
.