Как отсоединиться от контейнера Docker, не останавливая его – CloudSavvy IT

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

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

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

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

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

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

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

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

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

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

{“detachKeys”: “Ctrl-d, d”}

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

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

Помимо изменения вашей глобальной конфигурации, Docker принимает переопределения detachKeys для каждого контейнера и каждого вложения. Добавьте флаг –detach-keys к командам, которые могут присоединяться к процессам контейнера, чтобы установить определенную последовательность.

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

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

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

docker attach my-container –detach-keys = “Ctrl-d, _”

Флаг –detach-keys использует тот же формат последовательности клавиш, что и параметр конфигурации detachKeys. Флаг отменяет настройку docker.json; это, в свою очередь, отменяет последовательность Docker по умолчанию Ctrl-P / Ctrl-Q.

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

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

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

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

ps -ef | grep attach

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

kill -9

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

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

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

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

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

По умолчанию подключены все три потока. Вы можете опустить входной поток, передав флаг –no-stdin. Выходные данные контейнера будут передаваться в ваш терминал, но вы не сможете вводить какие-либо данные.

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

Резюме

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

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

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *