Я могу подключиться к процессу докера, но Ctrl+ cне работает, чтобы отсоединиться от него. exit
в основном останавливает процесс.
Каков рекомендуемый рабочий процесс, чтобы процесс запускался, иногда присоединяясь к нему, чтобы внести некоторые изменения, а затем отключая?
xterm
,konsole
и т.д. работы? Это работает для меня (я отстранен).Ответы:
Чтобы отсоединить tty без выхода из оболочки, используйте escape-последовательность Ctrl+ с Pпоследующим Ctrl+ Q. Подробнее здесь .
Дополнительная информация из этого источника :
^P^Q
присоединения докера^P^Q
; нарушит стандартный ввод^P^Q
; может SIGKILL клиент; можно подключить с помощью док-станцииисточник
"detachKeys": "ctrl-a,a"
в файле .docker / config.json или--detach-keys "ctrl-a,a"
в командной строке с присоединением и т. Д.Ctrl + Z
не отсоединяется; это просто фоны процесса. Это не то же самое, что отсоединение и несет в себе штраф за производительность.Проверьте также в
--sig-proxy
опции :Затем используйте CTRL+, cчтобы отделить
источник
docker run -ti --sig-proxy=false busybox top
что, кажется, не работает, процесс завершается с помощью ctrl-c, но начиная с,docker run -t -sig-proxy=false busybox top
кажется, работает и дает возможность выйти с помощью ctrl-cCtrl-c
остановит контейнер также.Если вы просто хотите внести некоторые изменения в файлы или проверить процессы, вот еще одно решение, которое вам, вероятно, понадобится.
Вы можете запустить следующую команду, чтобы выполнить новый процесс из существующего контейнера:
sudo docker exec -ti [CONTAINER-ID] bash
запустит новый процесс с оболочкой bash, и вы можете выйти из него с помощью Ctrl+ Cнапрямую, это не повлияет на исходный процесс.
источник
exec
это не так.Я думаю, что это должно зависеть от ситуации. Возьмем следующий контейнер в качестве примера:
(1) Используйте «
docker attach
», чтобы прикрепить контейнер:Поскольку "
docker attach
" не будет выделять новый tty, но будет повторно использовать исходный запущенный tty, поэтому, если вы запуститеexit
команду, это вызовет выход работающего контейнера:Так что если вы действительно хотите, чтобы контейнер работает выход, вы должны использовать Ctrl+ p+ Ctrl+ q.
(2) Используйте "
docker exec
"С «
docker exec
» будет выделить новый телетайп, так что я думаю , вы должны использоватьexit
вместо Ctrl+ p+ Ctrl+ q.Следующее выполняется Ctrl+ p+ Ctrl+ qдля выхода из контейнера:
Затем снова войдите в контейнер, вы увидите, что
bash
процесс в preaviousdocker exec
команде все еще жив (PID равен 15):источник
Для отсоединения от работающего контейнера используйте ^P^Q(удерживайте Ctrl, нажмите P, нажмите Q, отпустите Ctrl).
Есть одна загвоздка: это работает, только если контейнер был запущен с обоими
-t
и-i
.Если у вас есть работающий контейнер, который был запущен без одной (или обеих) этих опций, и вы присоединяетесь к нему
docker attach
, вам нужно будет найти другой способ отсоединения. В зависимости от выбранных вами опций и работающей программы, она ^Cможет работать или убивать весь контейнер. Вам придется экспериментировать.Еще один улов: в зависимости от программ, которые вы используете, ваш терминал, оболочка, SSH-клиент или мультиплексор могут перехватывать ^Pили ^Q( или обычно последний). Чтобы проверить, является ли это проблемой, попробуйте запустить или присоединить с
--detach-keys z
аргументом. Теперь вы должны быть в состоянии отсоединиться, нажав z, без каких-либо модификаторов. Если это работает, другая программа вмешивается. Самый простой способ обойти это - установить собственную последовательность отсоединения с помощью--detach-keys
аргумента. (Например, чтобы выйти с помощью ^K, используйте--detach-keys 'ctrl-k'
.) В качестве альтернативы, вы можете попытаться отключить перехват ключей в вашем терминале или другой мешающей программе. Например,stty start ''
илиstty start undef
может помешать терминалу перехватить^Q в некоторых системах POSIX, хотя я не нашел это полезным.источник
когда больше ничего не работает, откройте новый терминал :
источник
-9
не было необходимости.docker attach
а не его родителя.Чтобы отсоединиться от контейнера, вы просто держите Ctrlи нажимаете P+ Q.
Для подключения к работающему контейнеру вы используете:
источник
У меня была такая же проблема, ctrl- Pи Qне будет работать, и ctrl- C... в конце концов , я открыл еще одну терминальную сессию , и я сделал «Docker стоп containerid » и «старт докер containerid » и он получил работу. Weird.
источник
--rm
флагом.Ctrl+P
иCtrl+Q
работает, если вы запустили контейнер с-it
флагом.В той же оболочке, удерживайте ctrlклавишу и pзатем нажмите клавишиq
источник
-it
флагом.Я на Mac, и по какой-то причине Ctrl- p Ctrl- qбудет работать, только если я держуShift
источник
docker ps
docker kill ${containerId}
источник
чтобы остановить процесс Docker и освободить порты, сначала используйте ctrl- cчтобы выйти из контейнера, затем используйте Docker PS, чтобы найти список запущенных контейнеров. Затем вы можете использовать остановку Docker-контейнера, чтобы остановить этот процесс и освободить его порты. Имя контейнера вы можете найти в команде docker ps, которая дает имя в столбце имени. Надеюсь, что это решает ваши вопросы ....
источник
Если вам нужен только процесс докера, чтобы перейти в фоновом режиме, вы можете использовать
Ctrl + Z
Имейте в виду, что это не настоящий отрыв, и он идет с ухудшением производительности. (Вы можете вернуть его на передний план с помощью
bg
команды).Другой вариант - просто закрыть свой терминал, если он вам больше не нужен.
источник
Для тех, кто столкнулся с той же проблемой, что и я (не может отсоединиться, не убив контейнер, даже при установке ключа отсоединения) ......
При запуске ваших контейнеров с
docker-compose up -d
вместо того,
docker attach {container name}
чтобы использовать для просмотра журнала хвостов ....попробуйте
docker-compose logs -f {service name}
ctrl- cубивает хвост бревна, не убивая ваш контейнер{service name}
быть службой, перечисленной в стороне вашего файла docker-compose.yml .. (например, в то время как имя контейнера = elk_logstash_1 -> имя службы = logstashНТН
источник
Обновить
Я обычно использовал docker attach, чтобы увидеть, что отображал STDOUT, для устранения неполадок в контейнерах. Я только что обнаружил
docker logs --follow 621a4334f97b
, что позволяет мне видеть STDOUT, а также возможность ctrl + c от него, не влияя на работу контейнера! Именно то, что я всегда хотел.... естественно вам нужно будет заменить свой собственный идентификатор контейнера.
Оригинальный ответ
Я хотел оставить контейнер работающим, но прикрепил его без запуска контейнера
-it
. Мое решение заключалось в том, чтобы вместо этого пожертвовать своим SSH-соединением (поскольку я был SSHed в машину, на которой работали контейнеры). Убийство этой сессии ssh оставило контейнер нетронутым, но оторвало меня от него.источник