docker attach
命令可以将当前终端的标准输入、标准输出和标准错误连接到指定的容器中,这允许操作者查看其正在进行的输出或交互式地控制它,就像命令直接在终端中运行一样。
该命令显示的是容器
ENTRYPOINT/CMD
进程的输出, 执行该命令时有可能看起来像是hang住了,但是实际上进程可能没有与终端进行交互(输入内容到终端)。可以在docker的宿主机不同session中同时执行多次attach命令。
退出attach方式
CRTL+p CTRL+q 方式
ctrl+p ctrl+q
是默认的detach键序列(key sequence),也可以通过--detach-keys string
来覆盖默认的键序列。自定义的string可以是[a-Z]的字母或ctrl-
与以下内容的任意组合:
a-z (小写字母)
@
[
\
_
^
这种方式要求容器运行(docker run
)时必须同时指定 -i -t
参数。采用这种方式只是从容器中detach出来,不会停止容器的运行。
1 | ######### session 1 ########## |
如果容器运行时未同时指定 -i -t
参数,CTRL+p CTRL+q 无效。
CTRL+c方式
1 | --sig-proxy=true|false # 默认值 true |
该选项仅在non-TTY模式下起作用,即docker run时不指定-t选项。此时,默认–sig-proxy为true,SIGINT信号被发送至docker中PID为1的进程。
CTRL+c
发送 SIGKILL 信号到容器。If –sig-proxy is true (the default),CTRL-c sends a SIGINT to the container
在容器中以PID 1运行的进程会被Linux特别处理:它会忽略任何带有默认操作的信号。因此,除非进行了相应的编码,否则进程不会在SIGINT或SIGTERM上终止。
–sig-proxy=true && docker run -it
交互式启动bash CTRL+C作用在attach的bash,对容器退出无效,在attach中输入exit时容器退出
1 | ######### 交互式启动bash时 session 1 |
交互式启动非bash时 CTRL+C对容器退出有效
1 | ######### session 1 |
–sig-proxy=true && docker run -d
交互式启动非bash时 CTRL+C对容器退出有效
1 | [root@localhost ~]# docker run -d centos:8 top -b |
–sig-proxy=false && docker run -it
交互式启动bash时 CTRL+C对容器退出无效,在attach中输入exit时容器退出
1 | ######### session 1 |
–sig-proxy=false && docker run -d
交互式启动非bash时 CTRL+C对容器退出无效
1 | [root@localhost ~]# docker run -d centos:8 top -b |