什么时候在Docker容器中使用不带“--tty”的“--interactive”?

什么时候在Docker容器中使用不带“--tty”的“--interactive”?,docker,Docker,我在谷歌上搜索了一下,没有找到一个案例,我运行了docker-run-我运行了一些图片,而不是docker-run-它运行了一些图片 如果我运行docker run-I--name sample some_image bash,容器将在前台运行,但我无法从我所在的shell与它交互。我甚至不能用CTRL+C停止它。但是,我可以打开另一个shell并运行docker exec-it sample bash,然后访问容器 如果我运行docker run-I-d--name sample some_i

我在谷歌上搜索了一下,没有找到一个案例,我运行了
docker-run-我运行了一些图片
,而不是
docker-run-它运行了一些图片

如果我运行
docker run-I--name sample some_image bash
,容器将在前台运行,但我无法从我所在的shell与它交互。我甚至不能用CTRL+C停止它。但是,我可以打开另一个shell并运行
docker exec-it sample bash
,然后访问容器

如果我运行
docker run-I-d--name sample some_image bash
,容器将立即退出。我可以用
docker start sample
重新启动它,然后它保持不动,这样我就可以运行
docker exec-it sample bash
并再次与它交互

然而,在所有这些情况下,我最终使用
-it
与容器交互。在什么世界里我不需要
-t
标志


干杯

因为
-i
即使没有连接,也会保持标准DIN打开,它允许合成(管道)。
例如:

docker run ubuntu printf "line1\nline2\n" | docker run -i ubuntu grep line2 | docker run -i ubuntu sed 's/line2/line3/g'
(来源:)

或:

(来源:)

现在想象一下,这不是在键盘前,而是在脚本中使用,在脚本中,您可以通过比shell更好的方式向进程stdin写入代码:例如


我不知道
-i-d
@Auzias
-i-d
的预期结果是什么,在我下面链接的示例中:您启动并分离一个进程,您可以附加到该进程并使用stdin向该进程提供数据。请您逐步解释第一个片段中到底发生了什么?它最终会创建3个不同的容器吗?
printf“line1\nline2\n”
是否在第一个容器中运行?第一个容器是否将
“line1\nline2\n”
写入主机控制台?容器是否在打印“hello”后退出?@gisek 3容器连续运行,每个tome在其
echo
/
sed
操作后立即终止。。
-i
允许stdin获取上一个容器生成的标准输出。谢谢。在这一切结束后,我们会有3个新创建的停止的容器吗?@gisek是的。一个
docker容器修剪将处理它们(docker 1.13+/docker 17.03 ce:)
$ echo hello | docker run -i busybox cat
  hello