一尘不染

我什么时候可以在Docker容器中使用不带--tty的--interactive?

docker

我进行了一次谷歌搜索,运气不佳docker run -i some_image而不是 我碰运气docker run -it some_image

如果我运行docker run -i --name sample some_image bash,则容器在前台运行,但是我无法从所在的外壳与之交互。我什至无法使用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旗帜?

干杯


阅读 796

收藏
2020-06-17

共1个答案

一尘不染

由于-i即使未连接STDIN也会保持打开状态,因此可以进行合成(管道)。
例如:

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

2020-06-17