Docker命令行参考(14) – docker attach附着到一个运行中的容器

  1. Usage: docker attach [OPTIONS] CONTAINER
  2.  
  3. Attach to a running container
  4.  
  5. Options:
  6.       --detach-keys string   Override the key sequence for detaching a container
  7.       --help                 Print usage
  8.       --no-stdin             Do not attach STDIN
  9.       --sig-proxy            Proxy all received signals to the process (default true)

docker attach命令可以通过使用容器的ID或名称来附着到一个运行中的容器,来查看它的输出或以交互方式控制它。可以同时多次附着同一个容器进程,屏幕共享风格或快速查看进程的进度。

要停止一个容器,使用CTRL-c。此键序列向容器发送SIGKILL信号。如果–sig-proxy为true(默认),CTRL-c发送SIGINT到容器。可以使用CTRL-p CTRL-q键序列与容器分离。
当附着到一个启用tty的容器时,将禁止重定向docker attach命令的标准输入。

当客户諯使用docker attach连接到容器的stdio时,docker使用大约1MB的内存缓冲来最大化应用的吞吐量。如果填充了缓冲,API连接的速度将开始影响进程输出的写入速度,因为如果API连接速度慢时,缓冲区无法及时释放,导致进程等待缓冲区。这里其它应用如SSH类似。所以,不推荐使用attach命令来查看那些运行在前台,产生大量输出进程的日志。而是用户应该使用docker logs命令来查看这些日志。

示例

  1. $ docker run -d --name topdemo ubuntu /usr/bin/top -b
  2. $ docker attach topdemo
  3. top - 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
  4. Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
  5. Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  6. Mem:    373572k total,   355560k used,    18012k free,    27872k buffers
  7. Swap:   786428k total,        0k used,   786428k free,   221740k cached
  8.  
  9. PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  10.  1 root      20   0 17200 1116  912 R    0  0.3   0:00.03 top
  11.  
  12.  top - 02:05:55 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
  13.  Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
  14.  Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  15.  Mem:    373572k total,   355244k used,    18328k free,    27872k buffers
  16.  Swap:   786428k total,        0k used,   786428k free,   221776k cached
  17.  
  18.    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  19.        1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top
  20.  
  21.  
  22.  top - 02:05:58 up  3:06,  0 users,  load average: 0.01, 0.02, 0.05
  23.  Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
  24.  Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  25.  Mem:    373572k total,   355780k used,    17792k free,    27880k buffers
  26.  Swap:   786428k total,        0k used,   786428k free,   221776k cached
  27.  
  28.  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  29.       1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top
  30. ^C$
  31. $ echo $?
  32. 0
  33. $ docker ps -a | grep topdemo
  34. 7998ac8581f9        ubuntu:14.04        "/usr/bin/top -b"   38 seconds ago      Exited (0) 21 seconds ago                          topdemo

在第二个示例中,可以看到bash进程返回的退出代码由docker attach命令返回给其调用者:

  1. $ docker run --name test -d -it debian
  2. 275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab
  3. $ docker attach test
  4. root@f38c87f2a42d:/# exit 13
  5. exit
  6. $ echo $?
  7. 13
  8. $ docker ps -a | grep test
  9. 275c44472aeb        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test
标签:容器Docker 发布于:2019-11-19 13:21:45