По умолчанию при запуске контейнера вы также будете использовать команду оболочки при запуске контейнера, как показано ниже. Это то, что мы видели в предыдущих главах, когда работали с контейнерами.
На приведенном выше снимке экрана вы можете заметить, что мы выполнили следующую команду:
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 , нам нужно получить идентификатор процесса контейнера, поскольку это требуется командой 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
Выход
Из вывода мы можем наблюдать следующие моменты —
Приглашение изменяется непосредственно в оболочке bash, когда мы запускаем команду nsenter .
Затем мы запускаем команду выхода . Теперь обычно, если вы не используете команду nsenter , контейнер будет уничтожен. Но вы заметите, что когда мы запускаем команду nsenter , контейнер все еще работает.