Как вы присоединяетесь и отсоединяетесь от процесса Докера?
Я могу подключиться к процессу докеров, но Ctrl + c не работает, чтобы отсоединиться от него. exit
в основном останавливает процесс.
Каков рекомендуемый рабочий процесс для выполнения процесса, иногда прикрепленного к нему, чтобы внести некоторые изменения, а затем отсоединить?
Ответы
Ответ 1
Чтобы отсоединить tty без выхода из оболочки, используйте escape-последовательность Ctrl-p Ctrl-q.
более подробная информация здесь: https://docs.docker.com/engine/reference/commandline/attach/
дополнительная информация из этого источника (https://groups.google.com/forum/#!msg/docker-user/nWXAnyLP9-M/kbv-FZpF4rUJ):
- запуск докера -t -i → может быть отсоединен с помощью
^P^Q
и подключен с помощью присоединения докера - запуск докера -i → нельзя отсоединить с помощью
^P^Q
; нарушит стандартный ввод - запуск докера → невозможно отсоединить с помощью
^P^Q
; может SIGKILL клиент; можно подключить с помощью док-станции
Ответ 2
Отметьте также параметр --sig-proxy
:
docker attach --sig-proxy=false 304f5db405ec
Затем используйте CTRL+c
для отсоединения
Ответ 3
Если вы просто хотите внести некоторые изменения в файлы или проверить процессы, вот еще одно решение, которое вы, вероятно, захотите.
Вы можете выполнить следующую команду для выполнения нового процесса из существующего контейнера:
sudo docker exec -ti [CONTAINER-ID] bash
запустит новый процесс с оболочкой bash, и вы можете напрямую убежать от него ^c
, это не повлияет на исходный процесс.
Ответ 4
Я думаю, что это должно зависеть от ситуации. В качестве примера возьмем следующий контейнер:
# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds serene_goldstine
(1) Используйте "docker attach
" для прикрепления контейнера:
Так как "docker attach
" не будет выделять новый tty, но повторно использует исходный запуск tty, поэтому, если вы запустите команду exit
, это приведет к завершению работы контейнера:
# docker attach 91262536f7c9
exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 39 minutes ago Exited (0) 3 seconds ago serene_goldstine
Поэтому, если вы действительно не хотите сделать запуск контейнера, вы должны использовать Ctrl + p + Ctrl + q.
(2) Используйте "docker exec
"
Так как "docker exec
" будет выделять новый tty, поэтому я думаю, что вы должны использовать exit
вместо Ctrl + p + Ctrl + q.
Следующее выполняет Ctrl + p + Ctrl + q, чтобы выйти из контейнера:
# docker exec -it 91262536f7c9 bash
[email protected]:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss 04:03 0:00 bash
root 28 0.0 0.0 15564 1148 ? R+ 04:03 0:00 ps -aux
[email protected]:/# echo $$
15
Затем снова войдите в контейнер для входа, вы увидите, что процесс bash
в preavious docker exec
еще активен (PID равно 15):
# docker exec -it 91262536f7c9 bash
[email protected]:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss+ 04:03 0:00 bash
root 29 0.0 0.0 18164 1888 ? Ss 04:04 0:00 bash
root 42 0.0 0.0 15564 1148 ? R+ 04:04 0:00 ps -aux
[email protected]:/# echo $$
29
Ответ 5
Чтобы отсоединиться от работающего контейнера, используйте ^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, хотя я не считаю это полезным.
Ответ 6
когда ничего не работает, откройте новый терминал, а затем:
$ ps aux | grep attach
username <pid_here> .............. 0:00 docker attach <CONTAINER_HASH_HERE>
username <another_pid> .............. 0:00 grep --color=auto attach
$ kill -9 <pid_here>
Ответ 7
Чтобы отсоединиться от контейнера, вы просто держите Ctrl и нажмите P + Q.
Чтобы подключиться к работающему контейнеру, вы используете:
$ docker container attach "container_name"
Ответ 8
У меня была та же проблема, ctrl-P и Q не работают, ни ctrl-C... В конце концов я открыл еще один сеанс терминала, и я сделал "docker stop containerid" и "docker start containerid", и он получил задание сделанный. Weird.
Ответ 9
В той же оболочке удерживайте клавишу ctrl
и нажмите клавиши p
, затем q
Ответ 10
Я на Mac, и по какой-то причине Ctrl - p Ctrl - q будет работать, только если я тоже буду держать Shift
Ответ 11
чтобы остановить процесс докера и освободить порты, сначала используйте ctrl-c, чтобы оставить выход из контейнера, а затем используйте docker ps, чтобы найти список запущенных контейнеров. Затем вы можете использовать остановку контейнера докера, чтобы остановить этот процесс и освободить его порты. Имя контейнера, которое вы можете найти в команде docker ps, которая дает имя в столбце name. Надеюсь, это решает ваши вопросы....
Ответ 12
- Откройте новый терминал
- Найдите идентификатор работающего контейнера
docker ps
- Убить контейнер
docker kill ${containerId}
Ответ 13
Для тех, кто столкнулся с той же проблемой, что и я (не могу отсоединить, не убив контейнер, даже при установке ключа отсоединения)......
При запуске ваших контейнеров с 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
НТН