Команда docker cp – это удобная утилита, которая позволяет копировать файлы и папки между контейнером и хост-системой.
Если вы хотите скопировать файлы из вашей хост-системы в контейнер, вы должны использовать команду docker cp, например:
docker cp host_source_path container:destination_path
Если вы хотите скопировать файлы из контейнера в хост-систему, используйте эту команду:
docker cp container:source_path host_destination_path
Это может показаться немного пугающим, поэтому позвольте нам объяснить вам несколько практических примеров.
В нашей статье мы установили Docker на Ubuntu. Но шаги одинаковы для всех дистрибутивов, работающих под управлением Docker.
Мы надеемся, что вы знаете, как запустить Docker-контейнер, потому что вам нужен работающий контейнер.
Сначала перечислите ваши запущенные контейнеры, используя команду docker ps :
destroyer@andreyex:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8353c6f43fba 775349758637 "bash" 8 seconds ago Up 7 seconds ubu_container
Вам нужно знать либо идентификатор контейнера, либо имя контейнера. В нашем случае имя Docker-контейнера – ubu_container. и идентификатор контейнера 8353c6f43fba.
Если вы хотите убедиться, что файлы были успешно скопированы, вы можете ввести свой контейнер следующим образом, а затем использовать обычные команды Linux:
docker exec -it ubu_container bash
Копирование с помощью docker cp аналогично команде копирования в Linux .
Мы собираемся скопировать файл с именем a.py в каталог home/dir1 в контейнере.
docker cp a.py ubu_container:/home/dir1
Если файл успешно скопирован, вы не увидите никакого вывода на экран. Если путь назначения не существует, вы увидите ошибку:
destroyer@andreyex:~$ sudo docker cp a.txt ubu_container:/home/dir2/subsub Error: No such container:path: ubu_container:/home/dir2
Если целевой файл уже существует, он будет перезаписан без предупреждения.
Вы также можете использовать идентификатор контейнера вместо имени контейнера:
docker cp a.py 8353c6f43fba:/home/dir1
Команда docker cp выполняется только в хост-системе. Вы не можете запустить его в контейнере.
Даже если вы хотите скопировать файлы из Docker-контейнера в хост-систему, вам необходимо находиться в хост-системе и использовать команду следующим образом:
sudo docker cp ubu_container:/home/dir1/new.txt /home/destroyer
Если вы хотите скопировать каталог в Linux с помощью команды cp, вам придется использовать рекурсивную опцию -r.
Но в команде docker cp такие опции не нужны. Эта же команда работает для копирования файлов и папок.
docker cp /home/destroyer/my_dir ubu_container:/home sudo docker cp ubu_container:/home/my_dir /home/destroyer
Вы можете использовать режим архива при копировании с опцией -a. При этом вы можете скопировать все права доступа к файлу, UID и GID исходного файла.
docker cp -a host_source_path container:destination_path
docker cp -a container:source_path host_destination_path
Вот и все. Вы видите, как легко копировать файлы между хостом и контейнером с помощью команды docker cp.
Если у вас есть какие-либо вопросы или предложения, дайте нам знать в разделе комментариев.
Спасибо, крайне полезная статья!