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

时间:2015-08-26 15:55:35

标签: docker

我刚刚阅读了关于Docker的 THIS 文章,该文章介绍了如何将一个简单的应用程序停靠。执行以下命令:

$ 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)

谢谢。

3 个答案:

答案 0 :(得分:11)

Docker的def __init__(self): self.root = Tk() self.title = Frame(self.root, width = 500, height = 35) self.title.pack(side = TOP, expand = True) self.frame = Frame(self.root, width = 574, height = 574) self.frame.grid(columnspan = 30, rowspan = 31) self.label = Label(self.title, width = 300, height = 30) self.label.pack() self.root.mainloop() / -i允许您通过标准输入(“STDIN”)向容器发送命令,这意味着您可以“交互式”地将命令输入到由创建的伪tty /终端。 --interactive开关。

答案 1 :(得分:8)

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

答案 2 :(得分:2)

来自docs

对于交互式进程(如shell),必须同时使用-i -t 为了为容器进程分配 tty -i -t通常 就像在后面的示例中看到的那样,写成-it。指定-t为 客户端从管道接收其标准输入时禁止使用, 如:

$ echo test | docker run -i busybox cat

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

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

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

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