-i标志在docker中做了什么?

Ten*_*man 10 docker

我只是读文章泊坞窗,它描述了如何dockerize一个简单的应用程序的文章.执行以下命令:

$ docker run -t -i ubuntu:14.04 /bin/bash, 
Run Code Online (Sandbox Code Playgroud)

然后,给出以下解释:

在这里,我们再次指定了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)
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 13

Docker's -i/ --interactive允许您通过标准输入("STDIN")向容器发送命令,这意味着您可以"交互式"地将命令输入到由-t交换机创建的伪tty /终端.

  • 我还是很困惑.根据文档,"-i"的含义是"即使没有依附也要保持STDIN开放".这表明,当附加STDIN时,`-i`应该是不必要的,只有在使用`-d`选项或使用不包括STDIN的显式`-a`时才需要它.但是,这显然是错误的,因为如果我运行`docker run -t ubuntu cat`,它不会回显输入; 我必须添加`-i`才能得到它; 但我不明白为什么在这里需要`-i`,也不知道为什么有人会想要`-t`的行为而没有`-i`.我也不知道`-i`是否适用于`-d`或`-a`,正如文档所暗示的那样. (4认同)
  • 什么是交互式与非交互式之间的区别? (2认同)
  • 非交互式意味着您无法将文本传递给使用`-t`分配的tty.交互式意味着您可以键入命令,容器中的tty将接收此文本. (2认同)

Von*_*onC 8

在这里解释-i--interactive即使没有附加,也保持 STDIN 打开,如果你想输入任何命令,你需要它。

这有助于管道:

$ echo hello | docker run -i busybox cat
  hello
Run Code Online (Sandbox Code Playgroud)

含义:-i并不总是需要 -t ( tty)tty作为 text-terminal


JSO*_*C11 5

来自文档

\n\n
\n

对于交互式进程(如 shell),必须-i -t一起使用 \n 才能为容器进程分配tty 。-i -t通常\n 的写法-it如\xe2\x80\x99 将在后面的示例中看到的那样。-t当客户端从管道接收标准输入时,禁止指定,如下所示:

\n
\n\n
$ echo test | docker run -i busybox cat\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

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

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

\n