为什么我在交互式容器应用程序中获得自动输入

  • 本文关键字:应用程序 交互式 c++ docker
  • 更新时间 :
  • 英文 :


我有一个超级简单的cpp程序,它可以用std::getline(std::cin, ...)std::cin >> myint读取并打印到cout。当我将该应用程序容器化并使用ENTRYPOINT运行时,该应用程序正在从某个地方获得到STDIN的输入,因此它只是运行到完成,并且我的容器停止。如果我把getlinecout放在while(1)循环中,那么应用程序就会运行,一遍又一遍地将相同的输入打印到日志中。

如果我以交互方式运行容器并启动同一个应用程序,我可以毫无问题地与该应用程序交互。

我希望我的应用程序启动,然后docker attach到容器中,这样我就可以手动与它交互了。这可能吗?

事实证明它非常简单。

如果不使用-i运行,则stdin不会附加,并且我一读到内容就得到EOF。所以程序只是运行完并退出。

答案是使用带有-tid的容器运行,即保持stdin打开,分配伪TTY并分离。通过这种方式,应用程序保持打开状态,我可以稍后连接到容器并与之交互

相关内容

最新更新