我使用docker作为我的教育的一部分,我们用带有-i标志的Linux映像启动容器。为什么在启动容器时不必指定-t标志,但在使用run命令创建新容器时必须指定-i和-t?如:
-i
-t
run
docker start -i [container name]
vs
docker run -it ... (rest of the command)
当你创建一个容器的时候,它是否永久地拥有这个伪tty?如果没有指定-t,它会永久没有一个吗?
xt0899hw1#
为什么在启动容器时不需要指定-t标志,但在使用run命令创建新容器时必须同时指定-i和-t?首先,我认为在创建容器时不必指定-i。-i标志以交互模式启动容器,但如果您不需要与容器交互,那么不使用-i标志也完全可以。您可能希望在后台的容器中启动Web服务器,在这种情况下,您不会使用-i。如果没有指定-t,它会永久没有一个吗?正确。如果你试着运行一个程序,它在连接到tty时有特殊的行为,你就可以看到这种差异:
$ docker run -it ubuntu bash root@b4c828502868:/#
但是,如果你启动它时没有tty,它就不会显示提示符。
$ docker run -i ubuntu bash
您仍然可以输入命令(它仍然有stdin、stdout和stderr,即使没有-t),但它不会像普通的tty那样工作。
1条答案
按热度按时间xt0899hw1#
为什么在启动容器时不需要指定
-t
标志,但在使用run
命令创建新容器时必须同时指定-i
和-t
?首先,我认为在创建容器时不必指定
-i
。-i
标志以交互模式启动容器,但如果您不需要与容器交互,那么不使用-i
标志也完全可以。您可能希望在后台的容器中启动Web服务器,在这种情况下,您不会使用-i
。如果没有指定
-t
,它会永久没有一个吗?正确。如果你试着运行一个程序,它在连接到tty时有特殊的行为,你就可以看到这种差异:
但是,如果你启动它时没有tty,它就不会显示提示符。
您仍然可以输入命令(它仍然有stdin、stdout和stderr,即使没有
-t
),但它不会像普通的tty那样工作。