我何时在Docker容器中使用`--interactive`而不使用`--tty`?

时间:2016-02-17 14:36:39

标签: docker

我做了一些谷歌搜索,并没有找到我运行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旗帜?

干杯

1 个答案:

答案 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:example integration-cli/docker_cli_attach_test.go