Как использовать docker exec для запуска команд в контейнере Docker

Команда docker exec одна из самых полезных при работе с Docker. Она позволяет запускать команды в уже запущенном контейнере без остановки или перезапуска контейнера. Это особенно важно при отладке, проверке состояния контейнера или изучении файловой системы внутри него.

Что делает docker exec

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

  • Запустить интерактивную оболочку (shell) внутри контейнера

  • Выполнить одиночную команду и получить её вывод

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

Важно: команда работает только с контейнерами, которые уже запущены. Если контейнер остановлен, потребуется сначала его запустить.

Запуск тестового контейнера

Для демонстрации создадим контейнер на базе минимального образа Alpine Linux:

docker run -d --name container-name alpine watch "date >> /var/log/date.log"

Разбор команды:

  • -d - запускает контейнер в фоновом режиме.

  • --name container-name - задаёт имя контейнера.

  • alpine - образ Linux.

  • watch "date >> /var/log/date.log" - команда, которая каждые 2 секунды дописывает текущую дату в лог-файл внутри контейнера.

Как узнать имя контейнера

Чтобы использовать docker exec, нужно знать имя или ID контейнера. Для этого выполним:

docker ps

Вывод покажет список работающих контейнеров:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
76aded7112d4   alpine    "watch 'date >> /var…"   11 seconds ago   Up 10 seconds             container-name

Вы можете использовать либо CONTAINER ID, либо NAMES в команде docker exec.

Интерактивная оболочка внутри контейнера

Чтобы попасть внутрь контейнера и работать как в обычной оболочке:

docker exec -it container-name sh

Здесь:

  • -i - оставляет stdin открытым.

  • -t - выделяет терминал (TTY), чтобы работать интерактивно.

Вы попадёте в простой shell. Чтобы выйти, наберите:

exit

Запуск команды без интерактивного режима
Если нужно выполнить команду и сразу получить вывод, без входа в оболочку:

docker exec container-name tail /var/log/date.log

Пример вывода:

Tue Jan 27 07:23:38 UTC 2026
Tue Jan 27 07:23:40 UTC 2026
...

Такая команда подходит для быстрого получения информации или логов.

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

Если нужно выполнить команду из конкретной директории внутри контейнера:

docker exec --workdir /tmp container-name pwd

Ожидаемый вывод:

/tmp

Флаг --workdir изменяет текущую рабочую директорию перед выполнением команды.

Выполнение команды от имени другого пользователя

Чтобы выполнить команду с правами конкретного пользователя, используйте:

docker exec --user guest container-name whoami

Ожидаемый вывод:

guest

Флаг --user указывает пользователя внутри контейнера.

Передача переменных окружения

Иногда требуется передать переменные окружения вместе с командой:

docker exec -e TEST=sammy container-name env

Вывод покажет установленные переменные, включая TEST=sammy:

PATH=...
HOSTNAME=...
TEST=sammy
HOME=...

Чтобы задать несколько переменных, просто повторите флаг -e. Для передачи из файла используйте --env-file.

Частые ошибки

Вот наиболее распространённые проблемы и как их решить:

Контейнер не найден

Error: No such container: container-name

Проверьте имя с помощью docker ps.

Отказ в доступе

Error response from daemon: Permission denied

Запустите команду с sudo или убедитесь, что ваш пользователь имеет права Docker.

Контейнер остановлен

Error response from daemon: Container ... is not running

Запустите контейнер:

docker start container-name

и затем повторите docker exec.

Контейнер приостановлен

Error response from daemon: Container ... is paused

Снимите паузу:

docker unpause container-name

и повторите попытку.

Лучшие практики

  • Для долгих задач используйте --detach, чтобы команда выполнялась в фоне.

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

  • Следите за производительностью, например с docker stats.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Настройка SSH аутентификации на Linux

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

13 0 1 мин