Docker 容器 CP

描述在容器和本地文件系统之间复制文件/文件夹
用法docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
别名
docker cp

描述

docker cp实用程序会将SRC_PATHDEST_PATH. 您可以从容器的文件系统复制到本地计算机或 反向,从本地文件系统到容器。如果为 要么是-SRC_PATHDEST_PATH,您还可以从STDINSTDOUT.这CONTAINER可以是正在运行或已停止的容器。 这SRC_PATHDEST_PATH可以是文件或目录。

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

cp命令的行为类似于 Unixcp -a命令在 递归复制,并尽可能保留权限。所有权设置为 目标的用户和主组。例如,复制到 容器是使用UID:GIDroot 用户的 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
  • SRC_PATH指定目录
    • DEST_PATH不存在
      • DEST_PATH创建为目录,源的内容 目录复制到此目录中
    • DEST_PATH存在且是一个文件
      • 错误条件:无法将目录复制到文件
    • DEST_PATH存在,并且是一个目录
      • SRC_PATH不以/.(即:斜杠后跟)
        • 源目录将复制到此目录中
      • SRC_PATH结尾为/.(即:斜杠后跟)
        • 源目录的内容将复制到此 目录

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

冒号 (:) 用作CONTAINER及其路径。您可以 也使用:当指定SRC_PATHDEST_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,/devtmpfs 和 mounts 创建的 容器中的用户。但是,您仍然可以手动复制此类文件 运行tardocker exec.以下两个示例执行相同的作 以不同的方式(考虑SRC_PATHDEST_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.