Поиск по сайту:

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


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

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

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

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

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

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

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

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

Ключевые последовательности выражаются в виде списка, разделенного запятыми:

{
    "detachKeys": "Ctrl-d,d"
}

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

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

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

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

  • запуск докера
  • запуск докера
  • выполнение докера
  • подключение докера

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

docker attach my-container --detach-keys="Ctrl-d,_"

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

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

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

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

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

ps -ef | grep attach

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

kill -9 <PID>

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

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

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

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

docker attach my-container

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

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

Краткое содержание

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

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

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




Все права защищены. © Linux-Console.net • 2019-2024