Как вы присоединяетесь и отсоединяетесь от процесса Докера?

Я могу подключиться к процессу докеров, но 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

  1. Откройте новый терминал
  2. Найдите идентификатор работающего контейнера docker ps
  3. Убить контейнер 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

НТН