How do you attach and detach from Docker's process?
I can attach to a docker process but Ctrl+c doesn't work to detach from it. exit basically halts the process.
What's the recommended workflow to have the process running, occasionally attaching to it to make some changes, and then detaching?
To detach the tty without exiting the shell, use the escape sequence Ctrl-p Ctrl-q.
more details here: https://docs.docker.com/engine/reference/commandline/attach/
additional info from this source (https://groups.google.com/forum/#!msg/docker-user/nWXAnyLP9-M/kbv-FZpF4rUJ):
- docker run -t -i → can be detached with ^P^Qand 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
Check out also the --sig-proxy option:
docker attach --sig-proxy=false 304f5db405ec
Then use CTRL+c to detach
If you just want to make some modification to files or inspect processes, here's one another solution you probably want.
You could run the following command to execute a new process from the existing container:
sudo docker exec -ti [CONTAINER-ID] bash
will start a new process with bash shell, and you could escape from it by ^c directly, it won't affect the original process.
I think this should depend on the situation.Take the following container as an example:
# 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) Use "docker attach" to attach the container:
Since "docker attach" will not allocate a new tty, but reuse the original running tty, so if you run exit command, it will cause the running container 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
So unless you really want to make running container exit, you should use Ctrl+p + Ctrl+q.
(2) Use "docker exec"
Since "docker exec" will allocate a new tty, so I think you should use exit instead of Ctrl+p + Ctrl+q.
The following is executing Ctrl+p + Ctrl+q to quit the container:
# docker exec -it 91262536f7c9 bash root@91262536f7c9:/# 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 root@91262536f7c9:/# echo $$ 15
Then login container again, you will see the bash process in preavious docker exec command is still alive (PID is 15):
# docker exec -it 91262536f7c9 bash root@91262536f7c9:/# 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 root@91262536f7c9:/# echo $$ 29
when nothing else works, open a new terminal then:
$ 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>
To detach from a running container, use ^P^Q (hold the Ctrl, press P, press Q, release Ctrl).
There's a catch: this only works if the container was started with both -t and -i.
If you have a running container that was started without one (or both) of these options, and you attach with docker attach, you'll need to find another way to detach. Depending on the options you chose and the program that's running, ^C may work, or it may kill the whole container. You'll have to experiment.
Another catch: Depending on the programs you're using, your terminal, shell, SSH client, or multiplexer could be intercepting either ^P or ^Q (usually the latter). To test whether this is the issue, try running or attaching with the --detach-keys z argument. You should now be able to detach by pressing z, without any modifiers. If this works, another program is interfering. The easiest way to work around this is to set your own detach sequence using the --detach-keys argument. (For example, to exit with ^K, use --detach-keys 'ctrl-k'.) Alternatively, you can attempt to disable interception of the keys in your terminal or other interfering program. For example, stty start '' or stty start undef may prevent the terminal from intercepting ^Q on some POSIX systems, though I haven't found this to be helpful.
I had the same issue, ctrl-P and Q would not work, nor ctrl-C... eventually I opened another terminal session and I did "docker stop containerid " and "docker start containerid " and it got the job done. Weird.
To detach from the container you simply hold Ctrl and press P + Q.
To attach to a running container you use:
$ docker container attach "container_name"
In the same shell, hold ctrl key and press keys p then q
to stop a docker process and release the ports, first use ctrl-c to leave the exit the container then use docker ps to find the list of running containers. Then you can use the docker container stop to stop that process and release its ports. The container name you can find from the docker ps command which gives the name in the name column. Hope this solves your queries....