docker 的前台模式(Foregroud)和后台模式(Detached)(-a, --attach value;-t, --tty;--sig-proxy;-i, --interactive)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 的前台模式(Foregroud)和后台模式(Detached)(-a, --attach value;-t, --tty;--sig-proxy;-i, --interactive)相关的知识,希望对你有一定的参考价值。
Detached(后台模式) vs foreground(前台模式)
当我们启动一个容器时,首先需要确定这个容器是运行在前台还是运行在后台。
-d, --detach Run container in background and print container ID
Detached (-d)
如果在docker run后面追加-d=true
或者-d
,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互
。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的会话中。需要注意的是,容器运行在后台模式下,是不能使用--rm
选项的。
Foregroud
在前台模式下(不指定-d
参数即可),Docker会在容器中启动进程,同时将当前的命令行窗口附着到容器的标准输入、标准输出和标准错误中。也就是说容器中所有的输出都可以在当前窗口中看到。甚至它都可以虚拟出一个TTY窗口,来执行信号中断
。这一切都是可以配置的:
-a, --attach value Attach to STDIN, STDOUT or STDERR (default [])
-t, --tty Allocate a pseudo-TTY # pseudo 伪
--sig-proxy Proxy received signals to the process (default true)
-i, --interactive Keep STDIN open even if not attached
如果在执行run命令时没有指定-a
参数,那么Docker默认会挂载所有标准数据流,包括输入输出和错误,你可以单独指定挂载哪个标准流。
$ sudo docker run -a stdin -a stdout -i -t ubuntu /bin/bash
如果要进行交互式操作(例如Shell脚本),那我们必须使用-i -t
参数同容器进行数据交互。但是当通过管道同容器进行交互时,就不需要使用-t
参数,例如下面的命令:
echo test | docker run -i busybox cat
以上是关于docker 的前台模式(Foregroud)和后台模式(Detached)(-a, --attach value;-t, --tty;--sig-proxy;-i, --interactive)的主要内容,如果未能解决你的问题,请参考以下文章
docker CLI官方教程 run方法解析(docer run docker attach 与 docker exec的区别)