什么时候在Docker容器中使用不带`–tty`的`–interactive`?
我做了一些谷歌search,并没有运气find一个案件,我运行docker run -i some_image
而不是docker run -it some_image
。
如果我运行docker run -i --name sample some_image bash
,容器运行在前台,但我不能从我进来的shell进行交互。我甚至不能用CTRL + C停止它。 但是,我可以popup另一个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
即使不连接,也能保持STDIN打开,因此允许组合(pipe道)。
例如:
docker run ubuntu printf "line1\nline2\n" | docker run -i ubuntu grep line2 | docker run -i ubuntu sed 's/line2/line3/g'
(来源: 问题14221 )
要么:
$ echo hello | docker run -i busybox cat hello
(来源: 问题12401 )
现在想象一下,这不是在键盘前面,而是在一个脚本中使用,你可以通过比shell更好的东西来写入进程stdin
|
:示例integration-cli/docker_cli_attach_test.go