docker cp

Копирует файлы/папки между контейнером и локальной файловой системой

Использование

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

Обратитесь к разделу параметров для обзора доступных OPTIONS для этой команды.

Описание

Утилита docker cp копирует содержимое SRC_PATH в DEST_PATH. Вы можете копировать из файловой системы контейнера на локальный компьютер или наоборот, из локальной файловой системы в контейнер. Если - указан для SRC_PATH или DEST_PATH , вы также можете передать tar-архив из STDIN или STDOUT . CONTAINER может быть работающим или остановленным контейнером. SRC_PATH или DEST_PATH могут быть файлом или каталогом.

Команда docker cp предполагает, что пути к контейнерам относятся к корневому каталогу / контейнера. Это означает, что ввод начальной косой черты необязателен; Команда видит compassionate_darwin:/tmp/foo/myfile.txt и compassionate_darwin:tmp/foo/myfile.txt как идентичные. Пути к локальному компьютеру могут быть абсолютными или относительными. Команда интерпретирует относительные пути локальной машины как относительные к текущему рабочему каталогу, в котором запускается docker cp.

Команда cp ведёт себя так же, как команда Unix cp -a, в которой каталоги рекурсивно копируются с сохранением разрешений, если это возможно. Право собственности устанавливается для пользователя и основной группы в месте назначения. Например, файлы, скопированные в контейнер, создаются с UID:GID пользователя root. Файлы, скопированные на локальный компьютер, создаются с помощью 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 существует и является каталогом

      • файл копируется в данный каталог с использованием базового имени from

  • 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 на локальном компьютере, например, file:name.txt. Если вы используете : в пути к локальному компьютеру, вы должны указывает, например, относительный или абсолютный путь:

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

Примеры использования этой команды см. в разделе примеров далее.

Параметры

Имя, сокращенно

По умолчанию

Описание

--archive, -a

Режим архива (копировать всю информацию uid/gid)

--follow-link, -L

Всегда следуйте символьной ссылке в SRC_PATH

Примеры

Копирует локальный файл в контейнер

$ docker cp ./some_file CONTAINER:/work

Копирует файлы из контейнера в локальный путь

$ docker cp CONTAINER:/var/logs/ /tmp/app_logs

Копирует файл из контейнера в стандартный вывод. Обратите внимание, что команда cp создаёт поток tar

$ docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

Угловые шкафы

Невозможно копирует определённые системные файлы, такие как ресурсы в /proc , /sys , /dev , tmpfs и монтирования, созданные пользователем в контейнере. Однако вы все равно можете копирует такие файлы, вручную запустив 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 должен указывать каталог. Использование - в качестве DEST_PATH передает содержимое ресурса в виде tar-архива в STDOUT.