1、docker attach 简介
docker attach
是将本地标准输入、输出和错误流附加到正在运行的容器。查看其正在进行的输出或交互式地控制它,可以如命令直接在本地的终端中运行一样。当客户端使用docker attach连接到容器的stdio时,Docker使用~1MB内存缓冲区来最大化应用程序的吞吐量。如果填充此缓冲区,API连接的速度将开始影响进程输出写入速度。这与SSH等其他应用程序相似。因此,不建议运行性能关键型应用程序,这些应用程序通过缓慢的客户端连接在前台生成大量输出。相反,用户应该使用docker logs命令来访问日志。
2、docker attach 语法
docker attach [OPTIONS] CONTAINER
注意:
docker attach命令将显示ENTRYPOINT/CMD进程的输出。这可以看起来像是挂起附加命令,而实际上该进程当时可能根本没有与终端交互。
参考文档:https://docs.docker.com/engine/reference/commandline/attach/
3、docker run 命令
1)连接到正在运行的容器并从中分离
docker run -d --name topdemo ubuntu /usr/bin/top -b docker attach topdemo top - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie 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 Mem: 373572k total, 355560k used, 18012k free, 27872k buffers Swap: 786428k total, 0k used, 786428k free, 221740k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 17200 1116 912 R 0 0.3 0:00.03 top top - 02:05:55 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie 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 Mem: 373572k total, 355244k used, 18328k free, 27872k buffers Swap: 786428k total, 0k used, 786428k free, 221776k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 17208 1144 932 R 0 0.3 0:00.03 top top - 02:05:58 up 3:06, 0 users, load average: 0.01, 0.02, 0.05 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie 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 Mem: 373572k total, 355780k used, 17792k free, 27880k buffers Swap: 786428k total, 0k used, 786428k free, 221776k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 17208 1144 932 R 0 0.3 0:00.03 top ^C$ echo $? 0 docker ps -a | grep topdemo 7998ac8581f9 ubuntu:14.04 "/usr/bin/top -b" 38 seconds ago Exited (0) 21 seconds ago topdemo
2)获取容器命令的退出代码
docker run --name test -d -it debian 275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab docker attach test root@f38c87f2a42d:/# exit 13 exit echo $? 13 docker ps -a | grep test 275c44472aeb debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test
3)只看到输出和错误消息,我们可以使用-no-stdin选项省略stdin
docker attach --no-stdin test_redis
4)可以带上 --sig-proxy=false 来确保 CTRL-D 或 CTRL-C 不会关闭容器
docker attach --sig-proxy=false nginx
5)--detach-keys指定退出attach模式的快捷键序列,默认是CTRL-p CTRL-q
--detach-keys
配置覆盖Docker 快捷键序列以进行分离。如果Docker默认序列与用于其他应用程序快捷键序列冲突,这非常有用。有两种方法可以定义自己的分离快捷键序列,作为每个容器覆盖或作为整个配置上的配置属性。
要覆盖单个容器的序列,使用带有docker attach命令的--detach-keys=""
标志。的格式要么是字母[a-Z]
,要么是ctrl-
与以下任何一项相结合:
a-z
(单个小写字母字符)@
[
(左括号)\\
(两个向后斜杠)_
(下划线)^
这些a
、ctrl-a
、X
或ctrl-\\
值都是有效快捷键序列的例子。要为所有容器配置不同的配置默认快捷键序列。
docker attach --detach-keys="ctrl-c" nginx
4、选项说明
选项 | 默认 | 描述 |
--detach-keys | 重写分离容器的key sequence | |
--no-stdin | 不附加STDIN | |
--sig-proxy | true | 代理所有接收到的信号到进程 |