Управление контейнерами с помощью docker exec: доступ, команды и кейсы

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Как пользоваться docker exec: параметры и примеры

    Перед использованием необходимо удостовериться, что Docker установлен и контейнер работает. Если только начинаете, ознакомьтесь с руководством по установке Docker на Ubuntu 22.04.

    Базовый синтаксис docker exec такой:

    docker exec [опции] <контейнер> <команда>
    • <контейнер> — имя или ID целевого контейнера;

    • <команда> — инструкция, которую нужно выполнить внутри него.

    <контейнер> — имя или ID целевого контейнера;

    <команда> — инструкция, которую нужно выполнить внутри него.

    • -i — активирует режим ввода;
    • -t — подключает псевдотерминал, это полезно для запуска bash;
    • -d — выполняет задачу на фоне;
    • -u — позволяет запускать команду от указанного пользователя;
    • -e — задает переменные окружения;
    • -w — устанавливает директорию, в которой будет выполняться команда.

    Пример запуска bash внутри контейнера:

    docker exec -it my_container /bin/bash

    Таким образом можно без остановки контейнера получить доступ к его среде и выполнять команды напрямую.

    Примеры использования команды

    • Получение списка файлов внутри контейнера:

    Получение списка файлов внутри контейнера:

    • Выполнение команд с root-доступом:

    Выполнение команд с root-доступом:

    docker exec -u root my_container whoami
    • Передача переменных окружения:

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

    docker exec -e DEBUG=true my_container env
    • Установка рабочей директории:

    Установка рабочей директории:

    docker exec -w /var/www my_container ls docker exec -d my_container touch /tmp/testfile
    • Проверка конфигурации Nginx в контейнере перед его перезапуском:

    Проверка конфигурации Nginx в контейнере перед его перезапуском:

    docker exec -it nginx_container nginx -t

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

    • Выполнение от имени веб-пользователя:

    Выполнение от имени веб-пользователя:

    docker exec -u www-data my_container ls -la /var/www
    • Установка сразу нескольких переменных окружения:

    Установка сразу нескольких переменных окружения:

    docker exec -e DEBUG=true -e STAGE=dev my_container env
    • Задание рабочей директории с правами администратора:

    Задание рабочей директории с правами администратора:

    docker exec -u root -w /opt/app my_container ls

    Пример работы с Laravel в Simple-Server

    Если вы разворачиваете Laravel-приложение в контейнере на сервере Simple-Server, docker exec очень вам пригодится. Допустим, у вас есть контейнер с Laravel и база данных в отдельном сервисе.

    Чтобы подключиться к серверу:

    После подключения можно выполнять команды Artisan — встроенного командного интерфейса Laravel — внутри контейнера.

    docker exec -it laravel_app php artisan cache:clear docker exec -it laravel_app php artisan migrate
    • Проверить статус очередей:

    Проверить статус очередей:

    docker exec -it laravel_app php artisan queue:listen docker exec -u www-data -it laravel_app php artisan config:cache
    • Сделать бэкап базы данных, развернутой в отдельном контейнере:

    Сделать бэкап базы данных, развернутой в отдельном контейнере:

    docker exec -it mariadb_container mysqldump -u root -p laravel_db > backup.sql

    Перед выполнением последней команды убедитесь, что том для /backup смонтирован, или используйте SCP для передачи файла на локальную машину.

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

    Такой подход позволяет безопасно и быстро взаимодействовать с Laravel-приложением в контейнере, не прибегая к пересборке образа или правке Dockerfile.

    Расширенные возможности команды docker exec

    В этом разделе рассмотрим менее распространенные, но более гибкие варианты применения команды docker exec: например, запуск psql в контейнере PostgreSQL, выполнение Node.js-скриптов, подключение к остановленным контейнерам. Эти кейсы показывают, насколько гибкой может быть команда, если требуется что-то нестандартное.

    Команда не ограничивается только базовыми задачами: помимо запуска shell или bash, вы можете работать с окружениями, взаимодействовать с базами данных, выполнять Node.js-скрипты и подключаться к любому запущенному контейнеру.

    Примеры расширенного использования

    docker exec -it postgres_container psql -U postgres -d my_db
    • Запуск Node.js-скрипта. Если у вас есть файл script.js:

    Запуск Node.js-скрипта. Если у вас есть файл script.js:

    docker exec -it node_app node script.js
    • Запуск остановленного контейнера:

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

    docker start my_container   docker exec -it my_container bash
    • Управление пользователем. Укажите пользователя явно с помощью параметра -u:

    Управление пользователем. Укажите пользователя явно с помощью параметра -u:

    docker exec -u www-data my_container ls -la /var/www
    • Быстрое удаление временных файлов:

    Быстрое удаление временных файлов:

    docker exec -it my_container rm -rf /tmp/cache/*

    Такой подход удобно применять в крон-джобах или при ручной чистке временных директорий.

    Когда не стоит использовать команду

    Несмотря на удобство, docker exec — это инструмент ручного взаимодействия с контейнерами. В production-окружениях его использование может быть рискованным.

    Почему не стоит использовать docker exec в продакшене:

    1. Изменения не сохраняются в Dockerfile — это может нарушить воспроизводимость и целостность инфраструктуры;
    2. Нет журналирования команд — сложно отследить действия;
    3. Возможна рассинхронизация с CI/CD-пайплайном.

    Вместо этого рекомендуются:

    1. Dockerfile и docker-compose.yml : для воспроизводимых сборок;
    2. CI/CD : автоматизируйте задачи через GitHub Actions или GitLab CI;
    3. Мониторинг : логируйте процессы с помощью Prometheus, Grafana и Loki.

    Частые ошибки и их решение

    Рассмотрим ошибки, которые могут возникать в работе, и способы их устранения.

    Причина : контейнер не найден или остановлен

    Команда покажет список запущенных контейнеров. Если ваш контейнер отсутствует в этом списке — значит, он не работает или вовсе не создан.

    exec failed: container not running

    Причина : попытка выполнить команду в остановленном контейнере.

    Решение : docker start <container_name>

    Команда docker start запускает остановленный контейнер, после чего можно снова использовать docker exec.

    Причина : недостаточно прав у пользователя.

    Решение : docker exec -u root <container> <command>

    Флаг -u root запускает команду от имени пользователя root, что дает расширенные права доступа внутри контейнера. Это особенно полезно при работе с системными файлами или конфигурациями.

    Отличие docker exec от docker attach

    Помимо docker exec, существует и другой способ взаимодействия с контейнером — команда docker attach. Она подключает вас напрямую к основному процессу, запущенному внутри контейнера, как если бы вы запускали его в терминале.

    Это удобно, если нужно следить за логами или вводить данные напрямую, но есть риски: любые случайные нажатия (например, Ctrl+C) могут остановить контейнер. Поэтому важно понимать различия между этими командами.

    Кроме того, docker attach требует наличия TTY (эмуляции терминала) — среды, имитирующей поведение классического терминала, необходимой для корректной работы интерактивных приложений вроде bash или sh.

    Параметрdocker execdocker attach
    Требуется ли TTYПо необходимостиДа
    Множественные подключенияДаНет
    Вмешивается ли в основной процессНетДа
    Можно ли использовать для отладкиДаЧастично (может повредить приложение)

    Частично (может повредить приложение)

    Применяйте docker exec для вспомогательных задач — это дает гибкость и снижает риски.


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны