Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker attach 常用命令。

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(单个小写字母字符)
  • @
  • [(左括号)
  • \\(两个向后斜杠)
  • _(下划线)
  • ^

这些actrl-aXctrl-\\值都是有效快捷键序列的例子。要为所有容器配置不同的配置默认快捷键序列。

docker attach --detach-keys="ctrl-c" nginx

4、选项说明

选项

默认

描述

--detach-keys

重写分离容器的key sequence

--no-stdin

不附加STDIN

--sig-proxy

true

代理所有接收到的信号到进程

推荐文档

相关文档

大家感兴趣的内容

随机列表