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?

  • Docker: Cannot locate specified Dockerfile error
  • Docker expose all ports or range of ports from 7000 to 8000
  • Bower dependicies with postinstall on Docker
  • serving multiple docker microservices behind nginx proxy
  • Is there a way to rename network interfaces in Docker swarm?
  • Consul and Spring Boot services in Docker - not deregistering
  • Docker Registry - Industry Standards
  • BadRequestException: HTTP 400 Bad Request when try to start a docker container with spotify docker-client
  • Dockerize MySQL with database and tables
  • Restarting host from docker container
  • How to persist changes in boot2docker
  • How to monitor for Java Exceptions externally?
  • 5 Solutions collect form web for “How do you attach and detach from Docker's process?”

    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/

    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 attachwill 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 execwill 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>
    
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.