当前位置: 首页 > 面试题库 >

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

任伟
2023-03-14
问题内容

我进行了一次谷歌搜索,运气不佳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旗帜?

干杯


问题答案:

由于-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



 类似资料:
  • 我正在学习Vue JS,发现有时我们导入{},有时我们导入时没有{}。请问有什么区别? 非常感谢。

  • 已弃用。这种方法本质上是不安全的。使用thread.Stop停止线程会导致它解锁它锁定的所有监视器(作为未检查的ThreadDeath异常向堆栈上传播的自然结果)。如果以前由这些监视器保护的任何对象处于不一致的状态,则损坏的对象将对其他线程可见,从而可能导致任意行为。stop的许多用法应该被简单修改某个变量以指示目标线程应该停止运行的代码所取代。目标线程应该定期检查这个变量,如果变量指示它要停止运

  • 问题内容: 是像搬运工容器环境域名系统,可以代替引用其他容器中时? 问题答案: 该标志仅更改容器内的主机名。如果您的应用程序需要主机名的特定值,则可能需要这样做。它不会在docker外部更改DNS,也不会更改网络隔离,因此它将不允许其他人使用该名称连接到容器。 您可以使用容器名称或容器的ID(短短12个字符),使用Docker的嵌入式dns从一个容器连接到另一个容器,只要两个容器都在同一网络上并且

  • 问题内容: 我从jls找到了报价: 相等运算符可用于比较两个可转换(第5.1.8节)为数字类型的操作数,或两个boolean或Boolean类型的操作数,或 两个分别为引用类型或null类型的操作数 。所有其他情况都会导致编译时错误。 但是这段代码 每个操作数都是参考! 说这是不兼容的类型。 jls在哪里说这些类型应该兼容? 问题答案: 在15.21.3节(参考相等运算符==和!=)中: 如果无法

  • 我找到了JLS引文: 表示它是不兼容的类型。 在jls中哪些地方说这些类型应该兼容?

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。