docker push - Как вы присоединяетесь и отключаетесь от процесса Докера?





hub build (9)


В той же оболочке удерживайте клавишу ctrl и нажмите клавиши p затем q

Я могу подключиться к процессу докера, но Ctrl + c не работает, чтобы отсоединиться от него. exit основном останавливает процесс.

Каков рекомендуемый рабочий процесс, чтобы запустить процесс, иногда прикрепляться к нему, чтобы внести некоторые изменения, а затем отсоединить?




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




У меня была та же проблема, ctrl-P и Q не работают, ни ctrl-C ... В итоге я открыл еще один сеанс терминала, и я сделал «docker stop containerid » и «docker start containerid », и он выполнил эту работу. Weird.




Чтобы отсоединиться от работающего контейнера, используйте ^ 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, хотя я не нашел, что это полезно.







Если вы просто хотите внести некоторые изменения в файлы или проверить процессы, вот еще одно решение, которое вы, вероятно, захотите.

Вы можете запустить следующую команду для выполнения нового процесса из существующего контейнера:

sudo docker exec -ti [CONTAINER-ID] bash

начнет новый процесс с оболочки bash, и вы можете сбежать от него непосредственно с помощью ^c , это не повлияет на исходный процесс.




когда ничего не работает, откройте новый терминал :

$ 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>



Я думаю, что это должно зависеть от ситуации. Возьмем в качестве примера следующий контейнер:

# 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



Как отметил Жером Петаццони в группе докеров-пользователей :

Actually, you can SIGKILL the client, and reattach later.
However, this will disrupt stdin (the container will see EOF on stdin, and if it cares about stdin, e.g. if it's a shell, it will exit).

To recap:
docker run -t -i → can be detached with ^P^Q and reattached with docker attach
docker run -i → cannot be detached with ^P^Q; will disrupt stdin
docker run → cannot be detached with ^P^Q; can SIGKILL client; can reattach with docker attach






docker