我做了一些谷歌搜索,并没有找到我运行docker run -i some_image
而不是docker run -it some_image
的情况。
如果我运行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
旗帜?
干杯
答案 0 :(得分:29)
由于-i
即使未附加STDIN也会保持打开状态,因此它允许合成(管道)
例如:
docker run ubuntu printf "line1\nline2\n" | docker run -i ubuntu grep line2 | docker run -i ubuntu sed 's/line2/line3/g'
(来源:issue 14221)
或者:
$ echo hello | docker run -i busybox cat
hello
(来源:issue 12401)
现在想象一下这不是在键盘前面,而是在脚本中使用,你可以通过比shell
|
更好的东西写入进程stdin:exampleintegration-cli/docker_cli_attach_test.go