How do you attach and detach from Docker's process?

后端 未结 15 877
情书的邮戳
情书的邮戳 2020-11-29 14:42

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 recomm

15条回答
  •  囚心锁ツ
    2020-11-29 15:06

    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
    

提交回复
热议问题