我对Docker和Unix/Linux世界都很陌生。我一直在使用 docker 来构建我的映像并启动一些容器,并且确实很好地理解了容器化的概念。但是,有时我确实看到有些人使用诸如以下的标志来启动容器:
docker run -i -t imagename
我试图理解它的价值,并在这里遇到了 docker 文档:https://docs.docker.com/v1.13/engine/reference/run/
它有一些非常晦涩的解释,比如
-i: Keep STDIN open even if not attached
-t: Allocate a pseudo-tty
这甚至意味着什么?
https://docs.docker.com/engine/reference/run/#foreground
-a=[] : 附加到
STDIN
,STDOUT
和/或STDERR
-t : 分配伪 tty
--sig-proxy=true: 将所有接收到的信号代理到进程(仅限非 TTY 模式(
-i : 即使未连接,也保持 STDIN 打开
如果不指定 -a,则 Docker 将同时附加到标准输出和标准输出。您可以指定要连接到三个标准流(STDIN、STDOUT、STDERR(中的哪一个,如下所示:
$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash
对于交互式进程(如 shell(,必须一起使用 -i -t 才能为容器进程分配 tty。
-i -t 通常写为 -it,如后面的示例所示。
当客户端从管道接收其标准输入时,禁止指定 -t。