Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Linux / DevOps

Команда docker cp: как скопировать файл из сервера внутрь контейнера и обратно

Обновлено: 27.08.2026 · Официальная документация ↗

Когда требуется прямое копирование файлов через docker cp

При работе с Docker файлы внутри контейнера изолированы от основной файловой системы сервера хоста. Однако системным администраторам регулярно требуется экстренно скопировать конфигурационный файл из контейнера для редактирования, вытащить свежий дамп базы данных (dump.sql), залить лицензионный ключ или выгрузить логи упавшего приложения. Утилита docker cp позволяет копировать файлы и целые папки «на лету» без остановки контейнера и без настройки постоянных томов (Volumes).

Главное правило синтаксиса docker cp

Команда строится точно так же, как стандартная утилита cp:
docker cp [ОТКУДА] [КУДА]

Пошаговые примеры копирования файлов и папок

Сценарий 1: Копирование файла ИЗ контейнера на хост-сервер Linux

Выгрузим конфигурационный файл Nginx из работающего контейнера в текущую папку на сервере:

docker cp my-nginx-container:/etc/nginx/nginx.conf ./nginx.conf

(Синтаксис: имя_контейнера:путь_внутри_контейнера путь_на_хосте).

Сценарий 2: Копирование файла С хоста ВНУТРЬ работающего контейнера

Зальем отредактированный файл конфигурации обратно внутрь контейнера:

docker cp ./nginx.conf my-nginx-container:/etc/nginx/nginx.conf

После копирования примените настройки внутри контейнера без его остановки: docker exec my-nginx-container nginx -s reload.

Сценарий 3: Выгрузка дампа базы данных из контейнера MySQL

Выгрузим файл дампа базы на жесткий диск сервера:

docker cp mysql-server:/tmp/database_backup.sql /backup/database_backup.sql

Сценарий 4: Копирование папки целиком (со всеми вложенными файлами)

Скопируем папку с картинками сайта из контейнера на хост:

docker cp my-web-app:/var/www/html/uploads /home/ubuntu/site_uploads

Типовые ошибки администраторов

  • Копирование в несуществующую папку на хосте: Если целевой директории на сервере не существует, Docker создаст файл с именем этой папки вместо копирования внутрь нее. Всегда создавайте целевую папку заранее через mkdir -p.
  • Сброс прав доступа на скопированных файлах: Файлы, скопированные на хост командой docker cp, получают владельцем пользователя root. Если обычному пользователю нужен доступ к файлу, измените владельца: sudo chown $USER:$USER ./copied_file.conf.
Требуется настроить постоянный общий доступ к файлам между несколькими контейнерами?
Инженеры ITSTM спроектируют архитектуру постоянных томов (Docker Volumes / Bind Mounts / NFS), исключающую необходимость ручного копирования файлов.
💡 Практика специалистов: Никогда не используйте 'docker cp' для регулярного развертывания рабочего кода на Production-серверах. Ручная заливка файлов внутрь контейнера нарушает принцип неизменяемой инфраструктуры (Immutable Infrastructure). Все изменения должны собираться в новые версии Docker-образов через CI/CD пайплайны.

Частые вопросы (FAQ)

Можно ли использовать docker cp, если контейнер остановлен (Stopped)?

Да! Команда docker cp отлично работает как с запущенными, так и с полностью остановленными контейнерами, что спасает при аварийном извлечении данных.

Можно ли скопировать файл напрямую из одного контейнера в другой?

Напрямую нельзя. Копирование выполняется в два этапа: сначала из первого контейнера на хост-сервер, затем с хоста во второй контейнер (либо через pipe: docker cp c1:/file - | docker cp - c2:/path).

Работает ли docker cp с символическими ссылками (Symlinks)?

По умолчанию docker cp следует по символическим ссылкам и копирует реальный целевой файл. Для копирования самой ссылки используйте флаг -L (follow link).

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

Подключитесь внутрь контейнера через интерактивный терминал: docker exec -it имя_контейнера sh (или bash) и найдите путь командой 'pwd' или 'find'.

Полезные материалы
Рекомендуем