Учебники

Докер — Контейнеры и снаряды

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

Shell Shell

На приведенном выше снимке экрана вы можете заметить, что мы выполнили следующую команду:

sudo docker run –it centos /bin/bash 

Мы использовали эту команду для создания нового контейнера, а затем использовали команду Ctrl + P + Q для выхода из контейнера. Это гарантирует, что контейнер все еще существует даже после того, как мы выйдем из контейнера.

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

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

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

docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

Nsenter Image

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

Проверьте команду

Как видно на скриншоте выше, мы сначала использовали команду docker ps, чтобы увидеть запущенные контейнеры. Мы видим, что существует один работающий контейнер с идентификатором ef42a4c5e663.

Затем мы используем команду Docker inspect для проверки конфигурации этого контейнера, а затем используем команду grep, чтобы просто отфильтровать ID процесса. И из вывода мы видим, что идентификатор процесса равен 2978.

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

nsenter

Этот метод позволяет присоединиться к контейнеру, не выходя из контейнера.

Синтаксис

Команда nsenter –m –u –n –p –i –t containerID

Опции

  • -u используется для упоминания пространства имен Uts

  • -m используется для упоминания пространства имен монтирования

  • -n используется для упоминания пространства имен сети

  • -p используется для упоминания пространства имен процесса

  • -i s, чтобы контейнер работал в интерактивном режиме.

  • -t используется для подключения потоков ввода-вывода контейнера к операционной системе хоста.

  • containerID — это идентификатор контейнера.

  • Команда — это команда для запуска в контейнере.

-u используется для упоминания пространства имен Uts

-m используется для упоминания пространства имен монтирования

-n используется для упоминания пространства имен сети

-p используется для упоминания пространства имен процесса

-i s, чтобы контейнер работал в интерактивном режиме.

-t используется для подключения потоков ввода-вывода контейнера к операционной системе хоста.

containerID — это идентификатор контейнера.

Команда — это команда для запуска в контейнере.

Возвращаемое значение

Никто

пример

sudo nsenter m u n p i t 2978 /bin/bash

Выход

Nsenter

Из вывода мы можем наблюдать следующие моменты —

Приглашение изменяется непосредственно в оболочке bash, когда мы запускаем команду nsenter .

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