👁 docker cp удобен, но на больших файлах или директориях он может работать заметно медленно. Плюс иногда нужно передать данные напрямую между контейнером и хостом без временных файлов. В таких случаях можно использовать tar через STDOUT и пайпы — это быстрее и даёт больше контроля.
📝 Копирование файлов из контейнера на хост через поток
Вместо docker cp можно заархивировать данные внутри контейнера и передать их напрямую на хост через stdout. Контейнер упаковывает файлы в tar-поток, а на хосте они сразу распаковываются в нужную директорию. Это особенно удобно для больших директорий с логами или дампами.
docker exec my_container tar cf - /var/log/app | tar xf - -C ./logs
📝 Копирование файлов с хоста внутрь контейнера
Тот же приём работает и в обратную сторону — можно отправить файлы внутрь контейнера без промежуточных архивов. Файлы архивируются на хосте и сразу распаковываются внутри контейнера.
tar cf - ./config | docker exec -i my_container tar xf - -C /app/config
📝 Передача данных между контейнерами без записи на диск
Если нужно перекинуть данные между контейнерами, можно соединить их напрямую через пайп. Так данные идут напрямую между контейнерами без сохранения на хосте.
docker exec container_a tar cf - /data | docker exec -i container_b tar xf - -C /data
❗️ Этот приём часто используют в проде для бэкапов, логов и миграции данных между контейнерами — особенно когда объёмы большие и лишние операции с диском нежелательны.
tags: #docker #полезно



