Как выйти из контейнера docker ubuntu

Обновлено: 01.07.2024

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

Команды для работы с контейнерами имеют следующий синтаксис:

Рассмотрим некоторые из них более подробно.

Создание и запуск контейнеров

Запомните основные постулаты контейнеров в docker

  1. Контейнер живет, пока живет процесс, вокруг которого рождается контейнер.
  2. Внутри контейнера этот процесс имеет pid=1
  3. Рядом с процессом с pid=1 можно порождать сколько угодно других процессов (в пределах возможностей ОС, естественно), но убив (рестартовав) именно процесс с pid=1, контейнер выходит. (см п.1)
  4. Внутри контейнера вы увидите привычное согласно стандартам FHS расположение директорий. Расположение это идентично исходному дистрибутиву (с которого взят контейнер).
  5. Данные, создаваемые внутри контейнера остаются в контейнере и нигде более не сохраняются (ну, еще к этому слою есть доступ из хостовой ОС). удалив контейнер — потеряете все ваши изменения. Поэтому данные в контейнерах не хранят, а выносят наружу, на хостовую ОС.

-a – сокращение от –attach (прикрепить). Контейнер можно прикрепить к стандартным потокам STDIN, STDOUT или STDERR.
Запуск существующего контейнера (можно обращаться к контейнеру по идентификатору или имени):


Как уже было рассмотрено в предыдущей части, команда run объединяет создание и запуск контейнера. Для краткости с ней можно не указывать слово container.

Для запуска внутри контейнера команды:

Запуск в фоновом режиме

-d – это сокращение от –detach (отсоединить). Контейнер будет работать в фоновом режиме, и вы сможете использовать терминал для других команд.

Присвоение имени

После этого можно работать с контейнером (выполнять команды start, stop, remove, top, stats), обращаясь к нему по имени, например:

docker start myname – запуск контейнера
docker stats myname – отображение статистики использования ресурсов
docker top myname – отображение запущенных в контейнере процессов

Если вы попытаетесь выполнить например команду top, из выше указанного примера то получите ошибку

Я думаю если вы внимательно читали статью то сможете сами ответить почему возникает эта ошибка.

Запуск интерактивного сеанса

Для интерактивного подключения к оболочке контейнера и запуска команд, как в обычной системе Linux, нужно создать контейнер со следующими опциями:

Структура этой команды следующая:

-i задает запуск интерактивного сеанса.
-t выделяет TTY и подключает стандартные потоки ввода и вывода.
ubuntu – образ, используемый для создания контейнера.
bash (или /bin/bash) – запускаемая в контейнере Ubuntu команда.

После запуска контейнера с вышеуказанными ключами, мы как бы проваливаемся внутрь контейнера. Для выхода из запущенного сеанса и возвращения к терминалу вашего узла воспользуйтесь командой exit. Она прерывает все процессы контейнера и останавливает его:

Если вы интерактивно подключены к контейнеру, и вам требуется выйти из сеанса, не прерывая его, при помощи комбинаций клавиш Ctrl+p и Ctrl+q можно выйти из консоли и вернуться к терминалу вашего хоста.

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

Проверка состояния контейнеров

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



Команда inspect выдает множество полезной информации о контейнере:

Для вывода логов контейнера выполните команду logs:

Остановка контейнера

Обычно контейнер завершается автоматически после завершения процесса, но иногда требуется собственноручно завершить запущенный контейнер. Команда stop осуществляет «мягкое» завершение контейнера, по умолчанию предоставляя 10 секунд для завершения всех процессов:

Для немедленного завершения выполните команду kill. В большинстве ситуаций stop предпочтительнее.

Немедленное завершение всех запущенных контейнеров:

Удаление контейнера

удаление заданного контейнера.

удалить все не запущенные контейнеры.

Изменения в контейнере

Как уже отмечалось в начале, после остановки контейнера все изменения сделанные в нем удаляются. Это не совсем удобно, что же делать если нам нужно сохранить изменения? Для этого мы можем создать собственный контейнер взяв за основу уже готовый. Запустив интерактивный сеанс, мы можем работать в контейнере как на обычной Linux-машине и вносить любые необходимые изменения, например, устанавливать нужные пакеты. Допустим, нам требуется контейнер Ubuntu с сервером Nginx. Установим необходимые для этого программы:

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

Где идентификатор – это тот идентификатор, который использовался для первоначального запуска, а new-template – назначенное нами имя нового образа. Теперь он будет виден, если выполнить команду docker images:


где имя_пользователя – имя, соответствующее вашему аккаунту.

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Favorite

Добавить в избранное

Главное меню » Статьи » Как выйти из контейнера Docker

Установить Docker 1.11 на Ubuntu 16.04 LTS x64

Предположим, вы запускаете Docker-контейнер в интерактивном режиме, например так:

Таким образом, вы получаете интерактивную оболочку и сразу же входите в ОС, работающую как контейнер.

Чтобы выйти из этого запущенного контейнера, вы можете использовать ctrl + c, ctrl + d или ввести exit в терминале.

Здесь есть одна проблема. Если вы выйдете из контейнера таким образом, ваш контейнер также остановится.

Как вы можете видеть на выводе выше, команда docker ps не показывает запущенные контейнеры.

Выход из контейнера Docker без остановки (отсоединение контейнера)

Здесь вы можете отсоединить контейнер, нажав ctrl + p и ctrl + q один за другим . Мы знаем, что это странное сочетание клавиш для пользователей Linux, но это то, как вы можете сделать это легко.

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

Вы можете проверить это с помощью команды docker ps, чтобы увидеть ее в списке запущенных контейнеров.

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

Совет: по возможности запускайте контейнер в режиме демона

Мы всегда предпочитаем запускать контейнеры в режиме демона, например так:

Таким образом, контейнер запускается и работает в фоновом режиме. Флаг i означает интерактивный, а флаг t означает tty. В общем, это дает вам интерактивную оболочку, которая запускает bash, но она не доступна сразу.

Вы можете ввести работающий контейнер следующим образом:

Надеюсь, этот быстрый совет для Docker пригодился вам. Следите за новыми советами по Docker.

Читать Професійні послуги інтернет-маркетингу в агентстві Інкейворд

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Сначала нужно знатьЗапустить сервис DockerК ним относятся:

2 Закройте сервис докера

Завершите работу докераК ним относятся:

Образ Docker называется image, а контейнер называется container.

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

Например, есть изображение с именем ubuntu, поэтому, например, теперь мы запускаем контейнер этого изображения и вводим командную строку bash этого контейнера:

  • docker run: runs a container.
  • ubuntu: is the image you would like to run.
  • -t: flag assigns a pseudo-tty or terminal inside the new container.
  • -i: flag allows you to make an interactive connection by grabbing the standard in (STDIN) of the container.
  • /bin/bash: launches a Bash shell inside our container.

Docker run: запустить контейнер

Ubuntu: изображение, которое вы хотите запустить

-t: войти в терминал

-i: получить интерактивное соединение, получив входные данные контейнера

/ bin / bash: запустить оболочку bash в контейнере

Это войдет внутрь контейнера:

Если есть запущенный контейнер, вы можете запустить его во внешней операционной системе, где расположен контейнер:

Посмотреть этот контейнер.

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

Если вы хотите выйти:

3 Запустите контейнер (контейнер) докера image (изображение)

Если вы хотите снова открыть контейнер, запустите:

Где "goofy_almeida" - это имя контейнера.

4 Введите контейнер

4.1 Используйте команду «docker attach» для входа

В настоящее время контейнер работает в фоновом режиме. Если вы хотите войти в его терминал, то:

4.2 Используйте команду «docker exec -it» для входа

Недостатком является использование команды «docker attach» для входа в контейнер (контейнер), то есть при каждом выходе из контейнера на передний план контейнер также выходит.

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

goofy_almeida: имя контейнера для запуска

/ bin / bash: запустить оболочку bash в контейнере

Когда вы вводите «выход» или нажимаете «Ctrl + C» для выхода из контейнера, контейнер все еще работает в фоновом режиме, с помощью:

Хотя полная аппаратная виртуализация, например, с помощью KVM, Xen или Hyper-V, является отличным подходом для запуска на одном физическом хосте полностью изолированных экземпляров нескольких операционных систем, она требует различных накладных расходов с точки зрения обеспечения производительности, потребления ресурсов и времени на их подготовку. В некоторых конкретных случаях полная машинная виртуализация может, на самом деле, не требоваться.

Альтернативным легковесным подход виртуализации являются так называемые контейнеры Linux (LXC), с помощью которых реализуется виртуализация уровня операционной системы. LXC позволяет без больших накладных расходов, связанных с запуском виртуальных машин, запускать в легковесной песочнице контейнера несколько экземпляров полной операционной системы Linux. Контейнеры могут оказаться очень полезными, в тех случаях, когда вы настраиваете среду разработки/тестирования, которую нужно воспроизводить повторно, или когда приложение развертывается внутри отдельных песочниц для обеспечения дополнительной безопасности.

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

Docker является инструментальным средством с открытым исходным кодом, которое было разработано для облегчения развертывания контейнеров Linux. Docker быстро становится для контейнерных технологий стандартом де-факто, которым пользуются в основных дистрибутивах Linux, например, в Ubuntu и Red Hat .

В данном руководстве я собираюсь рассказать о том, как с помощью Docker управлять контейнерами Linux в системе Ubuntu 14.04. Обратите внимание, что для более ранних версий Ubuntu инструкции могут несколько отличаться. Если вы хотите попробовать Docker в Fedora или в CentOS, то обратитесь к этой статье .

На данный момент пакет Docker, доступный для Ubuntu, поддерживает только 64-разрядные системы. Чтобы запустить его на 32-разрядной машине, вам нужно будет собрать 32-разрядную версию Docker из исходного кода .

Установка Docker

Установить Docker можно достаточно просто с помощью команды apt-get .

Чтобы Docker мог запускать пользователь, не обладающий правами root, добавьте его в группу docker . Следующая команда позволит текущему пользователю, не имеющему прав root, запускать Docker.

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

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

Перезапустите сервис Docker.

Управление контейнерами Docker

Если вы хотите запустить новый контейнер Docker с операционной системой Ubuntu, то сначала скачайте образ Ubuntu Docker. С помощью приведенной ниже команды будет скачан образ Docker.

Приведенная выше команда немедленно запустит контейнер Ubuntu (и это здорово, если используются контейнеры!) и выдаст вам внутри контейнера приглашение для работы в оболочке. Теперь у вас должен быть полный доступ к операционной системе Ubuntu, которая находится внутри изолированного окружения.


Чтобы выйти из контейнера Docker, наберите "exit" в командной строке внутри контейнера.

Вы можете запускать другие контейнеры. Например, чтобы запустить контейнер Fedora, выполните следующую команду:

Если образ Fedora Docker локально недоступен, то сначала он будет автоматически загружен, а затем будет запущен Docker.


Если вы хотите запустить контейнер с конкретной версией дистрибутива, то вы и это также можете сделать. Например, чтобы запустить Ubuntu 13.04 Docker, выполните команду:

Сетевые средства контейнера

Docker использует мост Linux (Linux bridge) для соединения контейнеров между собой и их соединения с внешними сетями. После установки Docker вы должны увидеть созданный автоматически по умолчанию мост Linux docker0 . Каждый контейнер, который вы создаете, будет подключен к интерфейсу моста docker0 .


Настраиваемый мост Linux

Если вы хотите, то можете сами настроить мост Linux для взаимодействия контейнеров. Для этого, вы можете создать свой собственный мост и настроить его следующим образом. Вы можете назначить мосту отдельную подсеть и Docker будет назначать адреса IP из этой подсети. В качестве подсети Docker я собираюсь использовать сеть 10.0.0.0/24.

Чтобы создать собственный мост, который будет использоваться в Docker, добавьте "-b=br0" к переменной DOCKER_OPTS в файле /etc/default/docker.io и перезагрузите сервис Docker.

С этого момента любой новый контейнер будет подключен к мосту br0, и его адрес IP будет автоматически назначаться из сети 10.0.0.0/24.

Другие настройки

Есть еще несколько других настроек сети, используемой в Docker по умолчанию, которые делаются, в основном, с помощью переменной DOCKER_OPTS в файле /etc/default/docker.io:

  • "-dns 8.8.8.8 -dns 8.8.4.4": указываются сервера DNS, используемые контейнером.
  • "-icc=false": контейнеры становятся изолированные друг от друга.

Возможные проблемы

Ошибка возможна из-за того, что не работает демон Docker. Проверьте статус демона Docker и в первую очередь убедитесь в том, что вы его запустили.

Иллюстрация с логотипом Docker

Контейнеры Docker имеют интерактивный режим, который позволяет вам присоединять потоки ввода и вывода вашего терминала к процессу контейнера. Нажатие Ctrl-C обычно прерывает это
процесс, в результате чего контейнер остановится. Здесь можно отключиться от сеанса, не останавливая контейнер.

Отсоединение без остановки

Docker поддерживает комбинацию клавиш для изящного отсоединения от контейнера. Нажмите Ctrl-P, а затем Ctrl-Q, чтобы отключить соединение.

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

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

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

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

/ .docker / config.json, чтобы указать ключи, которые вы хотите использовать.

Docker поддерживает символы az и символы @, ^ и _, а также знак левой квадратной скобки ([)идвеобратныекосыечерты(\)ВсеонииспользуютсявместесклавишейCtrl;буквытакжеможноиспользоватьиндивидуальнобезCtrl[)andtwobackslashes()TheseareallusedinconjunctionwiththeCtrl-key;lettersmayalsobeusedindividuallywithoutCtrl

Последовательности клавиш представлены в виде списка, разделенного запятыми:

В этом примере происходит отсоединение от контейнера, когда вы сразу же нажимаете Ctrl-D, за которым следует клавиша d.

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

Команды, которые это поддерживают:

  • докер запустить
  • докер старт
  • docker exec
  • докер прикрепить

Вот как присоединиться к контейнеру, а затем использовать Ctrl-d с последующим подчеркиванием для отсоединения:

Отсоединение, когда последовательность клавиш не работает

Иногда вы можете столкнуться с контейнерным процессом, который отказывается отсоединяться, даже когда вы вводите последовательность клавиш. Это может произойти, если входной поток контейнера не подключен к вашему терминалу (флаг -i) или ему не выделен псевдо-TTY (флаг -t). Вы также можете столкнуться с этой проблемой, если процесс вашего контейнера обрабатывает последовательность клавиш отсоединения, и вы не переопределили ее при подключении.

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

Сначала найдите идентификатор процесса прикрепления:

ps -ef | grep attach

Используйте вывод ps, чтобы определить процесс docker.attach, который вам нужно убить. Команда в столбце CMD должна идентифицировать вложение, которое вы ищете. Запишите соответствующий номер PID и используйте команду kill, чтобы убить этот процесс:

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

Этот метод работает, убивая процесс Docker CLI, который подключал терминал к контейнеру, а не процесс в контейнере, который поддерживает его работу. Ваш исходный терминал снова становится пригодным для использования, а контейнер остается в рабочем состоянии.

Повторное подключение к контейнеру

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

докер прикрепить мой-контейнер

Снова используйте последовательность клавиш, чтобы отсоединить, или Ctrl-C, чтобы остановить процесс и контейнер. Если вы нажмете Ctrl-C или выйдете, docker attach установит $? в вашей оболочке правильно, чтобы вы могли проверить код выхода контейнера.

Резюме

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

Наконец, если вы хотите, чтобы ваш контейнер был постоянно отключен, запустите его с флагом -d (docker run -d my-image: latest). Это отправит контейнер прямо в фоновый режим и не будет выводить данные в вашу оболочку. Отсоединенные контейнеры всегда видны с помощью команды docker ps и могут быть остановлены с помощью docker stop my-container.

Читайте также: