В Docker 1.1.2 (последняя версия), как правильно отсоединить контейнер, не останавливая его?
Так, например, если я попробую:
docker run -i -t foo /bin/bash
илиdocker attach foo
(для уже работающего контейнера)
оба из которых доставляют меня к терминалу в контейнере, как мне выйти из терминала контейнера, не останавливая его?
exit
и CTR+C
оба останавливают контейнер.
Ответы:
Обновление: как указано в ответах ниже Ctrl+ p, Ctrl+ qтеперь превратит интерактивный режим в режим демона.
Хорошо Ctrl+ C(или Ctrl+ \) должен отсоединить вас от контейнера, но он убьет контейнер, потому что ваш основной процесс - bash.
Небольшой урок о докере. Контейнер не является полноценной полнофункциональной ОС. Когда вы запускаете контейнер, процесс, который вы запускаете, берет PID 1 и принимает мощность инициализации. Поэтому, когда этот процесс завершается, демон останавливает контейнер до тех пор, пока не будет запущен новый процесс (с помощью запуска докера) (дополнительные пояснения по этому вопросу http://phusion.github.io/baseimage-docker/#intro ).
Если вы хотите, чтобы контейнер постоянно работал в автономном режиме, я предлагаю вам использовать
С ssh-сервером на контейнере. (самый простой способ - следовать учебному пособию по докеризации openssh https://docs.docker.com/engine/examples/running_ssh_service/ )
Или вы можете просто перезапустить свой контейнер через
(он будет отключен по умолчанию)
источник
-ti -d
, затем присоединитеdocker attach
, затем отсоедините сначала ctrl + p, а затем ctrl + q. Я думал, я мог бы использовать только одно из сочетаний клавиш.Введите Ctrl+, pзатем Ctrl+ q. Это поможет вам переключить интерактивный режим в режим демона.
См. Https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
источник
Я копался в этом, и все ответы выше частично верны. Все зависит от того, как запускается контейнер. При запуске контейнера все сводится к следующему:
-t
)-i
)^P^Q
работает, НО только когда-t
и-i
используется для запуска контейнера:ctrl+c
работает, НО только когда-t
( без-i
) используется для запуска контейнера:Третий способ отделить
Есть способ отсоединиться, не убивая контейнер, хотя; вам нужна другая оболочка Таким образом, выполнение этого в другой оболочке отсоединилось и оставило запущенный контейнер
pkill -9 -f 'docker.*attach'
:Зачем? Потому что вы убиваете процесс, который связывал вас с контейнером, а не с самим контейнером.
источник
kill -9
Сигнал не делает. Процесс завершен и не имеет права регресса. Я предполагаю, что другие сигналы дают возможность контейнеру отключиться, а-9
нет.Если вы делаете «docker attach» идентификатор контейнера », вы попадаете в контейнер. Чтобы выйти из контейнера без остановки контейнера, вам нужно ввести Ctrl+ P+Q
источник
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Я считаю ответ Эшвина самым правильным, мой старый ответ ниже.
Я хотел бы добавить еще один вариант здесь, чтобы запустить контейнер следующим образом
Затем вы можете войти в контейнер и запустить bash с
Не нужно устанавливать sshd :)
источник
docker attach
было бы более стандартным, присоединяясь к первому запуску bash.docker exec
также работает здесь, однако он создает новый процесс bash в дополнение к первому. Конечно, процесс создается в том же контексте / среде / контейнере, что и первый, но он другой (аналогично открывать новую вкладку терминала в вашем любимом эмуляторе терминала).Способ отсоединения от интерактивного контейнера по умолчанию - Ctrl+ P Ctrl+ Q, но вы можете переопределить его при запуске нового контейнера или присоединении к существующему контейнеру с помощью флага --detach-keys .
источник
Если вы подключились через
docker attach
, вы можете отсоединиться, убив процесс присоединения докера. Лучше использовать параметр sig-proxy, чтобы избежать передачи Ctrl + C в ваш контейнер:Та же опция доступна для
docker run
команды.источник
php:7.3-apache
Если вы просто хотите увидеть результаты процесса, запущенного из контейнера, вы можете сделать это просто
docker container logs -f <container id>
.-f
Флаг делает это так , что выход из контейнераfollowed
и обновляется в режиме реального времени. Очень полезно для отладки или мониторинга.источник
Вы можете использовать эту
--detach-keys
опцию при запуске,docker attach
чтобы переопределить последовательность CTRL+ P, CTRL+ по умолчанию Q(это не всегда работает).Например, когда вы запускаете
docker attach --detach-keys="ctrl-a" test
и нажимаете CTRL+, Aвы выходите из контейнера, не убивая его.Другие примеры:
docker attach --detach-keys="ctrl-a,x" test
- нажмитеCTRL+A
и затем,X
чтобы выйтиdocker attach --detach-keys="a,b,c" test
- нажмитеA
, затемB
,C
чтобы выйтиВыписка из официальной документации:
Если вы хотите, вы можете настроить переопределение последовательности клавиш Docker для отсоединения. Это полезно, если последовательность Docker по умолчанию конфликтует с последовательностью клавиш, которую вы используете для других приложений. Существует два способа определить собственную последовательность ключей отсоединения: переопределение для каждого контейнера или свойство конфигурации для всей конфигурации.
Чтобы переопределить последовательность для отдельного контейнера, используйте
--detach-keys="<sequence>"
флаг с командой присоединения docker. Формат<sequence>
письма - либо буква[a-Z]
, либо вctrl-
сочетании с любым из следующего:Эти
a
,ctrl-a
,X
илиctrl-\\
значения являются примерами действительных последовательностей ключевыми. Чтобы настроить другую последовательность ключей конфигурации по умолчанию для всех контейнеров, см. Раздел «Файл конфигурации ».Примечание: это работает с версии 1.10+ докера (на момент этого ответа текущая версия была 18.03)
источник
Старый пост, но просто выйдите и запустите его снова ... Проблема в том, что если вы работаете на компьютере с Windows, Ctrl p или Ctrl P привязаны к печати ... выход из стартового контейнера не должен повредить чему-либо
источник