【问题标题】:what does the -i flag do in docker?-i 标志在 docker 中有什么作用?
【发布时间】:2020-04-17 17:58:04
【问题描述】:

我刚刚阅读了关于 Docker 的 THIS 文章,这是一篇描述如何对简单应用程序进行 docker 化的文章。执行以下命令:

$ docker run -t -i ubuntu:14.04 /bin/bash, 

然后,给出如下解释:

这里我们再次指定了 docker run 命令并启动了一个 ubuntu:14.04 图像。但是我们也传入了两个标志:-t 和 -i。这 -t 标志在我们的新容器内分配一个伪 tty 或终端,而 -i 标志允许我们通过抓取来建立交互式连接 容器的 (STDIN) 中的标准。

我不明白:

-i flag allows us to make an interactive connection by grabbing the standard in (STDIN)

谢谢。

【问题讨论】:

  • .... 互动?

标签: docker


【解决方案1】:

Docker 的-i/--interactive 允许您通过标准输入(“STDIN”)向容器发送命令,这意味着您可以“交互地”向-t 创建的伪终端/终端输入命令切换。

【讨论】:

  • 交互式和非交互式有什么区别?
  • 非交互式意味着你不能将文本传递给你用-t分配的tty。交互式意味着您可以键入命令,容器中的 tty 将收到此文本。
  • 我还是一头雾水。根据文档,-i 的含义是“即使未连接也保持 STDIN 开放”。这向我表明,-i 在附加 STDIN 时应该是不必要的,并且仅在使用 -d 选项或不包括 STDIN 的显式 -a 时才需要。但是,这显然是错误的,因为如果我运行docker run -t ubuntu cat,它不会回显输入;我必须添加-i 才能得到它;但我不明白为什么-i 在这里是必要的,也不明白为什么有人会想要-t 的行为而没有-i。正如文档所暗示的那样,我也看不到 -i 是否对 -d-a 有用。
【解决方案2】:

explained here -i, --interactive 保持 STDIN 打开即使没有连接,如果你想输入任何命令,你需要它。

这对管道有帮助:

$ echo hello | docker run -i busybox cat
  hello

含义:-i does not always need -t (tty),同tty being the text-terminal

【讨论】:

  • “未附加”到底是什么意思?
  • @VladimirPanteleev 附加到 tty。另见stackoverflow.com/a/36565383/6309stackoverflow.com/a/35462735/6309
  • 好的,虽然它有助于澄清究竟什么是“附加到 TTY”。所以,我理解“未附加”过去的意思是“未指定-a”,但-a 的含义发生了变化,现在不太明显了。所以,更准确地说,如果没有指定-d,则缺少-i-a-a stdout -a stderr相同,但有-i则与-a stdin -a stdout -a stderr相同。
  • @VladimirPanteleev 是的,-i 确实是-a stdin-i 保持容器的标准输入可用,无论是对伪 tty (-t) 还是对任何管道,当使用 -d 运行时,在后台模式下。
【解决方案3】:

来自docs

对于交互式进程(如shell),必须同时使用-i -t 为了给容器进程分配一个tty-i -t 经常是 写成-it,你会在后面的例子中看到。指定 -t 是 当客户端从管道接收其标准输入时被禁止, 如:

$ echo test | docker run -i busybox cat

-t 标志是 Unix/Linux 处理终端访问的方式。从历史上看,终端是一种硬线连接,具有真实的硬件。

然而,今天使用的是伪终端驱动程序。

  • 运行一个没有标志的容器,默认情况下你有一个 stdout (标准输出) 流。
  • 使用-i 标志运行,您会得到一个添加的stdin (标准输入) 流,它接受文本作为输入。
  • 使用 -t 运行,通常使用 -i,并且添加了终端驱动程序,如果您想与进程交互,这很可能是您想要的。它基本上使容器开始看起来和感觉像一个终端会话。

在没有-i 的情况下运行-t,意味着您将拥有终端,但您的输入不会连接到终端输入。

【讨论】:

  • 在什么情况下我们需要-t而不需要-i?如果没有case,Docker为什么不让-t自动获取stdin呢?
猜你喜欢
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2011-09-01
  • 2012-05-07
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多