Как использовать команду Docker Exec?

Как использовать команду Docker Exec?

Содержание
  1. Необходимые условия
  2. Команда запуска контейнера
  3. Примеры различных команд docker exec
    1. Команда Docker exec Create New File
    2. Команда List Running Processes
    3. Интерактивный режим с помощью Docker Exec
    4. Команда интерактивного режима
  4. Выполнение определенных команд в контейнере Docker
  5. Специфические команды, использующие docker exec
    1. Запуск фонового процесса в контейнере Docker
    2. Команда ”Запустить процесс в фоновом режиме
    3. Как выйти из команды Docker Exec
  6. Общие проблемы и устранение неполадок
  7. Заключение

Автор: Мухаммад Хаббаб

Docker превратился в важнейший инструмент современной индустрии, упрощающий разработку и развертывание программного обеспечения. Контейнеризация обеспечивает стабильное поведение приложений в разных средах, а эффективность и масштабируемость позволяют сократить цикл и снизить затраты. При создании и развертывании контейнеров часто возникает необходимость проверить или отладить текущее состояние запущенного контейнера.

Docker предоставляет

docker exec

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

Необходимые условия

Установка Docker: Docker должен быть установлен на вашей машине. На официальном сайте Docker есть инструкции по установке для многих операционных систем. Чтобы установить Docker на свою машину, посетите сайт:

Понимание интерфейса командной строки Docker: Docker обычно управляется через командную строку, поэтому необходимо базовое понимание интерфейса командной строки. Понимание основных команд и навигация по терминалу будут полезны. Если вы собираетесь использовать Docker в качестве пользователя root, не забудьте добавить в это руководство команды sudo.

Запуск контейнера: Нам нужно создать контейнер для выполнения команды docker exec. Например, мы создадим “test-container”, выполнив следующую команду:

Команда запуска контейнера

# Run the container in detached mode with the given name
docker run -d --name container-name alpine watch "date > /var/log/date.log"

При создании контейнера мы использовали несколько опций, таких как ’-d’, чтобы запустить контейнер, отсоединив его от терминала. Мы создали контейнер alpine и использовали ‘watch’ для итеративного выполнения команды “date >> /var/log/date.log”. Введенная команда внутри команды docker run будет печатать дату в логах через каждые две секунды.

После успешной установки Docker используйте следующую команду для проверки версии:

Команда подробной информации о версии Docker

`docker version`

Команда docker version предоставляет дополнительную информацию о версии движка Docker, установленной в вашей системе.

В качестве альтернативы можно выполнить следующую команду, которая просто выводит версию docker и никакой другой информации:

Команда ”Только версия Docker

Docker -version

  1. Понимание команды Docker Exec

Синтаксис команды Docker exec

docker exec <options> <container_name_or_container_id> <command>.

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

: В зависимости от сценария, мы можем указать несколько флагов, совместимых с командой docker exec, в качестве опций. Каждая опция служит для следующих целей:

Отдельный режим - запуск команды в фоновом режиме. Значение по умолчанию - false.

Переопределите последовательность клавиш для отсоединения контейнера. Формат может состоять из одного символа, например [a-Z] или ctrl-<значение>, где <значение> - одно из: a-z, @, ^, [, , или .*.

-i, —interactive=true|false

Держать STDIN открытым, даже если он не подключен. По умолчанию установлено значение false.

Предоставлять процессу расширенные возможности при запуске в контейнере. По умолчанию false. Без этого флага процесс, запущенный docker exec в работающем контейнере, будет иметь те же возможности, что и контейнер, которые могут быть ограничены. Установите —privileged, чтобы предоставить процессу все возможности.

Выделять псевдо-TTY. По умолчанию установлено значение false.

Устанавливает используемое имя пользователя или UID и, опционально, имя группы или GID для указанной команды.

<container_name_or_container_id >: Вы можете задать информацию о контейнере, например, идентификатор или имя контейнера, с помощью команды exec, чтобы помочь идентифицировать запущенный контейнер в среде Docker.

<команда>: Мы можем задать команду в команде exec, и эта конкретная команда будет запущена внутри контейнера.

Примеры различных команд docker exec

Пример 1: Создание файла внутри контейнера в корневом каталоге с помощью команды ‘docker exec’.

Команда Docker exec Create New File

docker exec -i test-container touch /newfile.

Пример 2: Мы хотим получить список всех запущенных процессов в конкретном контейнере с помощью ‘docker exec’.

Команда List Running Processes

docker exec -i test-container ps

Интерактивный режим с помощью Docker Exec

”-i” или ”—interactive” обеспечит открытие STDIN, если вы have не прикреплен, а ”-t” или “-tty” позволяет пользователям взаимодействовать с оболочкой контейнера в интерактивном режиме. Комбинация флагов (-i и -t) может использоваться для указания того, что команда должна выполняться в интерактивном режиме с использованием псевдо-TTY (-t terminal), подключенного к контейнеру. Это позволит вам отправлять команды и получать ответы от контейнера.

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

Команда интерактивного режима

docker exec -it test-container /bin/sh

Выполнение определенных команд в контейнере Docker

Давайте рассмотрим, как использовать некоторые конкретные команды с помощью docker exec. Как вы знаете, мы можем использовать команду docker exec, за которой следует идентификатор контейнера или имя контейнера и команда, которую мы хотим выполнить в этом докер-контейнере.

Рассмотрим пример, когда нам нужно перечислить содержимое текущего рабочего каталога в контейнере, для этого мы используем переключатель “ls” с командой docker exec. После перечисления всех элементов в текущем каталоге нам нужно запустить команду в определенном каталоге из списка. Для этого мы используем опцию ”—workdir” в команде, чтобы вывести имя каталога контейнера, в котором выполняется наша команда. В частности, мы запустим команду pwd внутри контейнера вместе с docker exec и опцией ”—workdir”, чтобы вывести имя каталога, в котором выполняется наша команда.

Наконец, чтобы обеспечить права доступа для дальнейшего выполнения других команд, мы хотим определить текущего пользователя, поэтому мы выполним команду “whoami” вместе с “docker exec”, чтобы вывести имя пользователя.

Специфические команды, использующие docker exec

docker exec test-container ls docker exec -workdir /home test-container pwd docker exec test-container whomami`.

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

С помощью этой команды вы можете попросить движок Docker продолжить выполнение команды, пока вы выполняете другую операцию, попросив его выполнить ее внутри контейнера. Когда вы запускаете контейнер в отсоединенном режиме с опцией ”-d”, Docker запускает контейнер в фоновом режиме и возвращает управление инструменту командной строки, который вы используете в данный момент.

Давайте запустим команду с помощью docker exec, которая будет постоянно добавлять журналы в фоновом режиме, даже если мы получили контроль над терминалом и разрешили ему выполнять другие команды.

Команда ”Запустить процесс в фоновом режиме

docker exec -d test-container bin/sh -c "while true; do echo 'Background Job Running Successfully'>> /var/log/container_logs.log; sleep 1; done".

Как выйти из команды Docker Exec

Чтобы выйти из оболочки контейнера, вы можете просто набрать команду “exit” или нажать “Ctrl + D”. Это вернет вас в командный интерпретатор, запущенный на вашем компьютере.

Команда выхода из оболочки контейнера

exit

Общие проблемы и устранение неполадок

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

docker exec

и это может быть связано с тем, что контейнер не запущен или вы ввели неправильное имя или идентификатор контейнера. Чтобы избежать этой проблемы, вы можете выполнить команду

docker ps

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

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

docker exec

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

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

, ``/bin/bash``, или любой другой, в зависимости от доступности.

Команда либо заблокирует терминал, либо немедленно остановится. Это может произойти, когда команда выполняется на переднем плане, ожидая ввода или вывода, или когда она выполняется в фоновом режиме и внезапно останавливается. Чтобы решить эту проблему, используйте ”-d”, чтобы запустить команду в отстраненном режиме в фоновом режиме.

Убедитесь, что ваш контейнер правильно сконфигурирован и что у вас установлены необходимые зависимости. При любых проблемах, которые могут возникнуть при выполнении команды “docker exec”, проверьте файл docker контейнера и файлы конфигурации.

Заключение

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

Эта команда позволит вам выполнять команды в оболочке вашего контейнера, что позволит вам более эффективно управлять и отлаживать его.

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

docker exec - ценный инструмент для более эффективного управления и масштабирования приложений в паре с инструментом автоматизации или платформой для оркестровки контейнеров, например Docker Compose или Kubernetes.

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

Команда Docker Exec создает безопасную среду для тестирования. Вы можете запустить новую сессию оболочки внутри контейнера и экспериментировать с различными командами, конфигурациями и настройками, не оказывая влияния на хост-систему или другие контейнеры. Этот метод ”песочницы” снижает риски, поощряя творчество.