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选项的。

–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 的前台模式和后台模式

以上是关于docker 的前台模式(Foregroud)和后台模式(Detached)(-a, --attach value;-t, --tty;--sig-proxy;-i, --interactive)的主要内容,如果未能解决你的问题,请参考以下文章

docker CLI官方教程 run方法解析(docer run docker attach 与 docker exec的区别)

docker容器中的前端和后端[关闭]

Android O 在打盹模式下前台服务未接收位置更新

Docker 容器后台运行和前台运行的区别

js前台页面与后台如何传参

【JSON】JSON在前端和后端传递