Как отсоединиться от контейнера Docker, не останавливая его – CloudSavvy IT
Контейнеры 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, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)