首页
学习
活动
专区
工具
TVP
发布

docker attach

描述

将本地标准输入,输出和错误流附加到正在运行的容器

使用

docker attach [OPTIONS] CONTAINER

备选方案

名称,缩写

默认

描述

--detach-keys

重写用于分离容器的密钥序列

--no-stdin

false

不附加 STDIN

--sig-proxy

true

代理所有接收到的信号到过程中

父命令

命令

描述

docker

泊坞窗 CLI 的基本命令。

扩展描述

用于docker attach使用容器的ID或名称将终端的标准输入,输出和错误(或三者的任意组合)附加到正在运行的容器。这允许您查看其正在进行的输出或以交互方式控制它,就好像命令直接在您的终端中运行一样。

注:attach命令将显示ENTRYPOINT/CMD过程。这可能看起来像是挂起附加命令,而实际上,进程可能根本没有与终端进行交互。

您可以同时从Docker主机上的不同会话多次附加到同一包含的进程。

要停止容器,请使用CTRL-c。该密钥序列发送SIGKILL到容器。如果--sig-proxy为真(默认),则CTRL-c发送一个SIGINT到容器。您可以从容器中分离并使用CTRL-p CTRL-q键序列保持运行。

注:在容器中作为PID 1运行的进程被Linux专门处理:它忽略任何具有默认操作的信号。因此,进程不会在SIGINTSIGTERM除非它被编码来这么做。

禁止在附加到启用tty的容器(即:启动时-t)时重定向docker attach命令的标准输入。

当客户端连接到容器的Stdio时,请使用docker attach,Docker使用~1MB内存缓冲区来最大化应用程序的吞吐量。如果填充了此缓冲区,API连接的速度将开始影响进程输出写入速度。这与其他应用程序类似,如SSH。因此,不建议运行性能关键的应用程序,这些应用程序在前台通过缓慢的客户端连接生成大量输出。相反,用户应该使用docker logs命令来访问日志。

重写分离序列

如果需要,可以为DECHACH配置一个覆盖Docker密钥序列。如果Docker默认序列与用于其他应用程序的密钥序列发生冲突,则此操作非常有用。有两种方法可以定义您自己的分离密钥序列,作为每个容器覆盖或作为整个配置的配置属性。

若要重写单个容器的序列,请使用--detach-keys="<sequence>"docker attach命令。的格式<sequence>不是一封信阿-Z,或ctrl-与下列任何一项相结合:

  • a-z (一个小写字母字符)
  • @ (在标志处)
  • [ (左括号)
  • \\ (两个反向斜线)
  • _ (下划线)
  • ^ (脱字号;补注号)

这些actrl-aX,或ctrl-\\的值是有效的密钥序列的所有实施例。要为所有容器配置不同的配置默认密钥序列,请参阅配置文件部分。

示例

附加到正在运行的容器并从中分离

$ 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

获取容器命令的退出代码

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

    $ 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

扫码关注腾讯云开发者

领取腾讯云代金券