了解 kubernetes 容器上的 ``stdin: true tty: true`` 吗?

Maa*_*mon 5 docker kubernetes

我一直在网上到处准备,但答案没有得到彻底解释。我希望这里的这个问题如果得到回答,可以提供对此事的更新和彻底的解释。

为什么有人会使用以下参数定义容器:

stdin: true
tty: true
Run Code Online (Sandbox Code Playgroud)

还有如果

`docker run -it`
Run Code Online (Sandbox Code Playgroud)

将执行的容器进程绑定到调用客户端 stdin 和 tty,在容器上设置这些标志会将其执行的进程绑定到什么?

我只能设想一种情况,即,如果命令是 bash,那么您可以稍后在容器运行后附加到它(即那个 bash 运行实例)。

但同样可以docker run it在必要时运行。我的意思是启动一个新的 bash 并做任何需要做的事情。无需附加到正在运行的

所以问题的第一部分是:

a) 引擎盖下发生了什么?

b) 为什么以及何时使用它,它有什么区别,附加值是什么?

Vas*_*pov 11

AFAIK,容器规范中的设置stdin: true只会保持容器进程标准输入打开,等待有人使用kubectl attach.

至于tty: true- 这只是告诉 Kubernetes stdin 也应该是一个终端。一些应用程序可能会基于 stdin 是终端这一事实来改变其行为,例如添加一些交互性、命令完成、彩色输出等。但在大多数情况下,您通常不需要它。

顺便说一句kubectl exec -it POD bash,还包含标志,-it但在这种情况下,这确实需要,因为您在容器的名称空间中生成 shell 进程,该进程需要来自用户的标准输入和终端。