什么是docker run -it标志?


108

我当时在用docker做一些复杂的事情,但事实证明我不知道-it标志的含义。最近,我遇到了一些docker run命令示例,这使我有些困惑。

docker run -itd ubuntu:xenial /bin/bash 

我的问题是-it,如果在实例化过程中运行容器,在这里写标志有什么意义bin/bash

在文档中,我们有一个例子

docker run --name test -it debian

有解释

-it指示Docker分配一个与容器的stdin连接的伪TTY;在容器中创建一个交互式bash shell。

帮助页面中-t标志的说明和解释

-t,--tty分配伪TTY

如果我在删除-it标志

docker run -d ubuntu:xenial /bin/bash

我新创建的容器寿命不长

docker ps -a

它被指定为退出

抱歉,如果我的问题很愚蠢,我在Internet上找不到解释(对此我有很大的误解)。


如果/bin/bash在stdin上没有可用的内容,则它没有运行的命令,也没有提示用户的方法,因此退出。这是100%正常和预期的行为。
Charles Duffy

Answers:


97

-it是短期的--interactive + --tty,当你docker run用这个命令..它会带你直接容器内部,,其中-d是短期的--detach,这意味着你只要运行容器,然后分离从它所以基本上你在后台运行..集装箱 编辑:所以如果运行docker容器,-itd它将运行-it选项并将您与容器分离,因此即使没有任何默认应用程序运行,您的容器仍在后台运行。


这不是正确的答案,因为我的容器在没有-it选项的情况下运行后已停止。
Alex

1
这意味着您的容器中有一个错误..因此您的容器无法启动...或者CMD默认情况下它没有任何命令,因此默认情况下它没有运行任何应用程序。.so,如果您在后台运行它,它将立即退出,因为它没有任何工作要做。。
Fendi jatmiko

@Alex,如果您的容器中的程序是在关闭stdin时退出的,则您有答案(关于为什么不使用则无法运行-i)。同样,如果它运行的命令根据是否存在TTY而表现不同,则根据的存在,您可以获得不同的行为-t
Charles Duffy

@Alex,...要清楚/bin/bash </dev/null,如果您在没有Docker的情况下运行它,也会立即退出。docker run不运行就对其开始-i的副本执行相同的操作bash。(没有-t,它有一个stdin但没有TTY,因此它不会将自己检测为交互式shell,因此您会得到一些稍微不同的行为)。
Charles Duffy

1
@AdmiralAdama,解决颜色问题的方法是-t选项。需要TTY才能了解颜色标记。
kroiz

42

docker run -it ubuntu:xenial /bin/bash以交互模式(因此-it标志)启动容器,该模式允许您与/bin/bash容器进行交互。这意味着现在你将有bash会话内部的容器,这样你就可以lsmkdir或者做容器内任意bash命令。

这里的关键是“交互”一词。如果省略该标志,则容器仍将执行,/bin/bash但立即退出。使用该标志,容器将执行,/bin/bash然后耐心等待您的输入。


1
我需要使用-t标志吗? docker run -i ubuntu:xenial /bin/bash
Alex

3
-t:伪tty或“伪终端”。没有终端,您将无法将输入发送到容器。
dvnguyen

docker run -it ubuntu:xenial 感谢您的回答,但我也将从头开始使用此命令进行终端会话(然后我需要运行bin / bash)。它还创建了一个终端会话
Alex

1
你是对的。我会收回我的话。没有-t标签的人仍然可以与容器交互,但是有了它,您将拥有一个更好,功能更多的终端。您可以使用with -i和with -it来查看差异。
dvnguyen

我找不到任何区别。感谢您的努力!
亚历克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.