Эта статья была обновлена с тех пор, когда она была первоначально опубликована 23 сентября 2023 года. Что такое команда EXEC?
Команда Docker Exec позволяет пользователям запускать команды в уже развернутом контейнере.
Два способа использования команды EXEC:
- Внутри контейнера: запустите Docker exec —IT id /bin /bash (где идентификатор является первым четырьмя символами идентификатора работающего контейнера), чтобы получить доступ к оболочке контейнера.
- Вне контейнера: используйте команду Docker Exec ID (где идентификатор — это первые четыре символа идентификатора и команды работающего контейнера, команда для запуска в контейнере).
Предварительные условия:
- Занимающийся экземпляр Docker на сервере Ubuntu 22.04 (или более новый)
- Официальный ключ Docker GPG добавлен и установлен
Шаги, чтобы начать с команды Docker Exec:
Эффективно используя команду Docker Exec:
- Запустите команды внутри или внешних контейнеров, не доступая за его оболочку.
- Используйте оператор && для команд цепи вместе.
- Следуя этим шагам, пользователи могут эффективно использовать команду Docker Exec для управления своими работающими контейнерами Docker.
Для тех, кто только начинает ваше путешествие с контейнерами Docker, есть чему поучиться. Помимо вытягивания изображений и развертывания основных контейнеров, одна из первых вещей, которые вы захотите понять, — это команда EXEC.
По сути, команда EXEC позволяет запускать команды в уже развернутом контейнере. Команда Exec позволяет вам делать это двумя разными способами … изнутри или снаружи контейнера. Я собираюсь показать вам, как сделать оба. В конце концов, вы будете лучше подготовлены к взаимодействию с вашим бегом контейнерами Docker.
Что вам понадобится
Вам понадобится только работающий экземпляр Docker Runtime Engine, установленного на поддерживаемой платформе. Я продемонстрирую это на сервере Ubuntu 22.04.
Если у вас нет Docker, давайте сначала позаботимся об этом. Если у вас уже установлен Docker, идите вперед и перейдите к следующему разделу.
Установите Docker
Прежде чем вы сможете установить Docker на сервере Ubuntu, сначала необходимо добавить официальный ключ Docker GPG с командой:
curl -fssl | sudo gpg -dearmor -o/susr/share/keyrings/docker-archive-keyring.gpg 1 curl -fssl | Sudo gpg-dearmor -o/ushare/keyrings/docker-archive-keyring.gpg
Вам будет предложено для вашего пароля SUDO.
Как только клавиша GPG успешно добавлен, создайте необходимый репозиторий Docker со следующей командой:
Установите несколько зависимостей с этой командой:
sudo apt-get установить apt-transport-https ca-certificates curl gnupg lsb-release -y 1 sudo apt-get intement apt-transport-https ca-certificates curl gnupg lsb-release -y
Обновление Apt с:
Sudo apt-get update 1 sudo apt-get update
Установите Docker с командой:
Sudo apt-get Установка Docker-Ce Docker-Ce-Cli Containerd.io -y 1 Sudo apt-get установить Docker-Ce Docker-Ce-Cli Containerd.io -y
Далее вы должны добавить своего пользователя в группу Docker с командой:
sudo usermod -ag docker $ user 1 sudo usermod -ag docker $ user
Войдите и войдите в систему, чтобы изменения вступили в силу.
Поздравляю, Docker теперь готов к работе.
Развернуть тестовый контейнер
Чтобы использовать команду EXEC, мы сначала должны развернуть простой тестовый контейнер. Для этого мы будем использовать проверенный nginx и развернуть контейнер с командой:
Docker run -name docker -nginx -p 8080: 80 -d nginx 1 docker run -name docker -nginx -p 8080: 80 -d nginx
После запуска команды Docker должен сообщить об идентификаторе контейнера. Если вы пропустите это, вы всегда можете просмотреть это:
Docker PS 1 Docker PS
Вам понадобится только первые четыре символа идентификатора.
Доступ к оболочке работающего контейнера
Теперь мы можем получить доступ к оболочке работающего контейнера, которая позволит вам запустить команду изнутри контейнера. Это делается с командой EXEC так:
Docker exec —IT id /bin /bash 1 docker exec —IT id /bin /bash
Где идентификатор является первым четырьмя символами идентификатора работающего контейнера. Затем вы должны оказаться в приглашении на беговой контейнере. Допустим, вы хотите обновить программное обеспечение. Вы можете сделать это с командами:
APT-GET UPDATE UPT-GET UPGRAGE -Y 12 APT-GET UPDATEAPT-GET UPGRAGE -Y -Y
После завершения обновления вы можете выйти из оболочки с помощью команды:
Выход 1 выход
Давайте упростим процесс.
Запустите команду извне контейнера
Благодаря команде EXEC вам не нужно сначала получать доступ к оболочке контейнера перед запуска команды. Вместо этого вы можете отправить команду внутри контейнера. Давайте придержимся нашего примера обновления и обновления работающего контейнера Nginx. Опять же, нам понадобится идентификатор контейнера для этой команды.
Чтобы обновить и обновить программное обеспечение для нашего контейнера Nginx (без сначала доступа к контейнеру), команда будет:
Docker Exec Id apt-get update & amp; & amp; apt-get обновление 1 Docker Exec Id Id apt-Get Update & amp; & amp; APT-GET UPGRADE
Где идентификатор является первым четырьмя символами идентификатора контейнера.
Использование оператора && распространено в Linux и позволяет командам Daisy Chain вместе, чтобы они запускали один за другим.
Вы можете использовать этот метод для запуска практически любой команды. Например, вы можете просмотреть файл index.html, используемый Nginx с помощью команды:
Docker Exec ID Cat/Ousr/share/nginx/html/index.html 1 Docker Exec Cat/Ousr/share/nginx/html/index.html
Где идентификатор является первым четырьмя символами идентификатора контейнера.
Давайте скопируем новый файл index.html в работающий контейнер, а затем используем EXEC для просмотра. Создайте новый файл на вашем хосте с помощью:
nano index.html 1 nano index.html
В этом файле вставьте следующее содержимое:
Сохраните и закройте файл. Далее скопируйте файл в запущенном контейнере Nginx с помощью команды:
Docker CP Index.html ID:/usr/share/nginx/html/1 docker cp index.html id:/usr/share/nginx/html/
Где идентификатор является идентификатором работающего контейнера.
Теперь мы можем просмотреть содержимое файла с помощью:
Docker Exec ID Cat/Ousr/share/nginx/html/index.html 1 Docker Exec Cat/Ousr/share/nginx/html/index.html
Вывод должен быть просто:
Привет, новый стек 1 Привет, новый стек
И вот как вы используете команду Docker Exec. С помощью этого инструмента вы можете лучше (и более эффективно) управлять своими контейнерами Docker.
Общие ошибки с командой Docker Exec
Вот некоторые общие ошибки, которые могут возникнуть при использовании команды Docker Exec:
- Недостаточные разрешения: Пользователь, управляющий командой Docker Exec, может не иметь достаточных разрешений для выполнения контейнеров или доступа к своим ресурсам.
- Неправильный идентификатор контейнера: Если вы используете неверный идентификатор контейнера, он может привести к неудачному выполнению команды внутри контейнера.
- Команда не найдена: Если вы запускаете команду, которая не установлена или доступна в контейнере, она не будет сбой с ошибкой «Команда не найдена».
- Контейнер остановлен или выходит: Запуск команды Docker Exec в контейнере с остановленным или выходом приведет к ошибке.
- Ошибки тайм -аута: Если выполнение команды занимает слишком много времени в контейнере, Docker может тайм -аут и вернуть ошибку.
- Ограничения ресурсов: Контейнер с недостаточными ресурсами (память, процессор) может привести к выходу из строя Docker Exec.
- Ограничения файловой системы: При запуске команд, которые записываются в файлы вне файловой системы контейнера или изменяют конфиденциальные данные, такие ограничения, как привилегии и пространство, могут привести к ошибкам или проблемам с Docker.
- Проблемы с подключением к сети: Если контейнер не подключен должным образом к сетевому интерфейсу или имеет ограниченный доступ к сети, Docker Exec может выйти из строя.
FAQ Q: Какова цель команды EXEC?
A: Команда EXEC позволяет запускать команды в уже развернутом контейнере, чтобы вы могли взаимодействовать с работающими контейнерами.
В: Могу ли я использовать команду EXEC без создания нового контейнера?
A: Нет, по умолчанию команда Docker Exec требует запущенного контейнера. Если вы хотите выполнить команду за пределами существующей оболочки контейнера, вам необходимо создать интерактивный сеанс, используя Docker Exec —IT ID /Bin /Bash.
В: Каков формат для указания идентификатора контейнера в команде Docker Exec?
A: Первые четыре символа идентификатора контейнера (например, «1234») могут использоваться как часть команды.
В: Могу ли я использовать команду EXEC для обновления зависимостей в существующем контейнере?
A: Да, вы можете запустить команды, такие как обновление APT-GET && APT-GET обновление внутри работающего контейнера с помощью Docker Exec.
В: Как я могу просматривать вывод из команды Docker Exec?
A: Вывод выполненной команды отображается в вашем терминале. Если вы хотите захватить выход для дальнейшей обработки или журнала, используйте операторы перенаправления (например,>, >>) по мере необходимости.
В: Могу ли я объединить несколько команд вместе с помощью команды EXEC?
A: Да, по умолчанию Docker выполняет каждую команду последовательно. Чтобы выполнить серию команд один за другим, не ожидая ввода из оболочки, используйте оператор && между ними (например, обновление APT-GET && apt-Get Upgrade -y).
В: Что произойдет, если я запускаю неудачную команду внутри существующего контейнера?
A: Если вы запускаете команду, которая сбои в существующем контейнере, Docker выходит и завершает ваш интерактивный сеанс. Чтобы избежать этого, используйте опцию -n с Docker Exec, который предотвращает ожидание ввода Docker (например, Docker Exec —IT Id /bin /bash -n apt -get update &&…).
В: Могу ли я провести данные между контейнерами, используя команду EXEC?
A: Нет, по умолчанию Docker не поддерживает трубопроводы или перенаправление выходного/входа в контейнер. Чтобы достичь этой функции, используйте такие инструменты, как Docker Run –rm —IT
В: Как мне выйти из интерактивного сеанса, запущенного командой EXEC?
A: Вы можете выйти из интерактивного сеанса, используя команду выхода или закрыв терминал.
Советы по устранению неполадок:
- Если Docker не может обнаружить работающий контейнер, убедитесь, что он действительно жив и активен.
- Убедитесь, что у вас есть достаточные разрешения для доступа и управления контейнерами.
- Убедитесь, что изображение, используемое в контейнере, действителен и существует в вашем локальном кеше.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Джек Уоллен-это то, что происходит, когда генеральный разум с умом с современным Snark. Джек — искатель истины и писатель слов с квантовым механическим карандашом и разрозненным ударом звука и души. Хотя он проживает … читайте больше от Джека Валлена