Гид по технологиям

Работа с контейнерами Docker: команды, SSH и копирование файлов

• 5 min read • DevOps • Обновлено 27 Nov 2025
Docker: команды, SSH и копирование файлов
Docker: команды, SSH и копирование файлов

Иллюстрация терминалов и процессов Docker

TL;DR

Чтобы выполнять команды внутри контейнеров Docker, используйте docker exec с флагами -it; для интерактивного доступа запускайте оболочку (/bin/bash). Для перемещения файлов между хостом и контейнером применяется docker cp, а для постоянного доступа лучше настраивать bind-mount или volume. Внимательно относитесь к правам, переменным окружения и секретам.

Быстрые ссылки

  • Запуск команд в контейнерах
  • Подключение по SSH к контейнеру
  • Копирование файлов в контейнер и из него

Запуск команд в контейнерах

Чтобы выполнить команду в контейнере, потребуется его идентификатор контейнера (container ID) или имя контейнера, если вы задали его вручную. Список запущенных контейнеров можно получить командой:

docker ps

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

docker exec -it containerID tail /var/log/nginx/access.log
docker exec -it containerID ./script.sh

Флаги -it означают “interactive” и TTY — их обычно используют вместе, чтобы получить интерактивную сессию. Полезные дополнительные флаги:

  • –workdir или -w — сменить рабочую директорию перед выполнением команды.
  • –detach или -d — запустить процесс в фоновом режиме.
  • –env или -e — задать переменные окружения для команды.
  • –env-file — загрузить переменные окружения из файла (удобно и безопаснее для секретов).
  • –privileged — запустить с расширенными правами (использовать осторожно).
  • –user — выполнить команду от имени другого пользователя.

Важно: docker exec работает только для запущенных контейнеров. Чтобы внести постоянные изменения в приложение, лучше пересобрать образ и задеплоить новую версию, либо изменять данные в томах (volumes) или bind-монтах.

Примеры типичных задач

  • Просмотр логов: docker exec -it containerID tail -n 200 /var/log/app.log
  • Запуск миграций базы данных внутри контейнера приложения
  • Отладка: запуск интерпретатора языка или утилит в интерактивной оболочке

Подключение по SSH к контейнеру

Вместо одиночной команды можно открыть интерактивную оболочку:

docker exec -it containerID /bin/bash

Большинство образов содержат минимальный набор утилит. Если /bin/bash отсутствует, попробуйте /bin/sh. Это подключение доступно только с хоста и удобно для отладки. Если нужно, чтобы контейнер был доступен через SSH как VPS, можно установить и запустить SSH-сервис внутри контейнера, но это меняет модель безопасности и оркестрации: контейнеры обычно не предназначены для полноценного SSH-доступа.

Важно:

  • Не включайте SSH в контейнер без острой необходимости; лучше использовать инструменты оркестрации (docker exec, kubectl exec) для отладки.
  • Если всё же ставите SSH, настройте ключи и ограничьте доступ по сети.

Копирование файлов в контейнер и из него

Команда docker exec удобна для команд, но для работы с файловой системой удобнее docker cp. Примеры:

docker cp container:/var/log/nginx/example.log example.log
docker cp nginx:/etc/nginx/ nginxconfig/

docker cp копирует файлы и директории между хостом и контейнером. Если вам нужно постоянное или программируемое совместное хранение данных, рассмотрите bind-mount или docker volume — они делают файлы сразу доступными из хоста без копирования.


Когда этот подход не подходит

  • Контейнер остановлен: docker exec и docker cp не работают с остановленными контейнерами (docker cp частично работает с архивами, но целесообразнее монтировать тома или запустить контейнер).
  • Ограниченные возможности образа: в минимальных образах может не быть нужных утилит.
  • Требуется масштабирование: ручной доступ к контейнерам не масштабируется для CI/CD и кластеров.

Альтернатива: используйте тома и bind-mounts для доступа к файлам, CI/CD для деплоя и логирование в централизованные системы (ELK, Prometheus, внешние сервисы) вместо ручного вытягивания логов.


Безопасность и работа с секретами

  • Не передавайте секреты через аргументы команд в открытом виде. Используйте –env-file и Docker secrets (в Docker Swarm) или секреты оркестратора.
  • Не используйте –privileged без крайней необходимости.
  • Ограничьте сеть и права пользователя внутри контейнера через –user и capability drops.

Быстрая шпаргалка (cheat sheet)

  • Список контейнеров: docker ps
  • Запустить команду интерактивно: docker exec -it
  • Открыть оболочку: docker exec -it /bin/bash
  • Копировать файл из контейнера: docker cp :/path/to/file ./
  • Копировать файл в контейнер: docker cp ./localfile :/path/to/
  • Запустить фоновой процесс: docker exec -d

Роли и чек-листы

Разделим действия по ролям, чтобы ускорить повседневные операции.

Developer:

  • Проверить docker ps и выбрать контейнер.
  • Открыть оболочку через docker exec -it.
  • Извлечь логи через docker cp или перенаправление STDOUT.
  • Не править конфигурации вручную в контейнере — фиксировать изменения в коде и образе.

Sysadmin/DevOps:

  • Использовать тома/volume для постоянных данных.
  • Настроить мониторинг и централизованное логирование.
  • Контролировать доступ SSH/сетевые правила.
  • Автоматизировать обновления образов и деплой через CI/CD.

Методика быстрого восстановления (микро-плейбук)

  1. Проверка статуса: docker ps / docker logs
  2. Если контейнер упал — просмотреть логи: docker logs
  3. Если нужно срочно получить файлы — docker cp :/path ./
  4. Для изменений — пересобрать образ и развернуть новую версию, не менять критичные файлы вручную.

Дерево принятия решения (Mermaid)

graph TD
  A[Нужно выполнить команду?] -->|Да| B{Контейнер запущен?}
  B -->|Да| C[docker exec -it]
  B -->|Нет| D[Запустить контейнер или монтировать том]
  A -->|Нет, нужно файлы| E{Доступ к файлам нужен часто?}
  E -->|Да| F[Настроить bind-mount/volume]
  E -->|Нет| G[docker cp]

Критерии приёмки

  • Удалённая команда выполняется и возвращает ожидаемый результат внутри контейнера.
  • Логи доступны локально либо в централизованном хранилище.
  • Изменения в конфигурации задокументированы и применяются через пересборку образа.
  • Секреты не передаются в явном виде через командную строку.

Глоссарий (одной строкой)

  • container ID — уникальный идентификатор запущенного контейнера.
  • docker exec — команда для выполнения процессов внутри контейнера.
  • docker cp — команда для копирования файлов между хостом и контейнером.
  • bind-mount / volume — способы постоянного хранения данных для контейнеров.

Заключение

docker exec и docker cp дают гибкость для отладки и простых операций с контейнерами, но при регулярной работе лучше полагаться на тома и автоматизацию. Соблюдайте принципы безопасности: не раскрывайте секреты и не давайте повышенных привилегий без необходимости.

Важно: для стабильных и воспроизводимых изменений пересобирайте образы и используйте CI/CD.


Краткое содержание:

  • Используйте docker exec -it для интерактивных команд и оболочек.
  • Применяйте docker cp для копирования файлов между хостом и контейнером.
  • Для постоянного доступа используйте bind-mounts/volumes.
  • Следите за безопасностью и автоматизируйте деплой.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро