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


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

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 , контейнер все еще работает.