我有一个超级简单的cpp程序,它可以用std::getline(std::cin, ...)
和std::cin >> myint
读取并打印到cout
。当我将该应用程序容器化并使用ENTRYPOINT
运行时,该应用程序正在从某个地方获得到STDIN
的输入,因此它只是运行到完成,并且我的容器停止。如果我把getline
和cout
放在while(1)
循环中,那么应用程序就会运行,一遍又一遍地将相同的输入打印到日志中。
如果我以交互方式运行容器并启动同一个应用程序,我可以毫无问题地与该应用程序交互。
我希望我的应用程序启动,然后docker attach
到容器中,这样我就可以手动与它交互了。这可能吗?
事实证明它非常简单。
如果不使用-i
运行,则stdin
不会附加,并且我一读到内容就得到EOF
。所以程序只是运行完并退出。
答案是使用带有-tid
的容器运行,即保持stdin
打开,分配伪TTY并分离。通过这种方式,应用程序保持打开状态,我可以稍后连接到容器并与之交互