Tag: stdin

保持对通过FIFO在后台运行的程序的STDIN的访问

所以我有一个docker镜像,包含一个minecraft服务器。 一个Minecraft服务器接受来自STDIN的input,所以在使用java -jar server.jar启动服务器之后,我可以通过在控制台中input命令(例如停止服务器)来提供命令。 理想情况下,我想在一个看起来像这样的shell脚本中启动服务器: #!/bin/sh .. some initialization .. exec java -Xmx$RAM -Xms$RAM -jar server.jar 这样,java可执行文件接pipe进程,以便在docker发送SIGTERM时可以正常终止。 问题出现在我想保留一个人为的STDIN ,允许我通过另一个脚本执行命令到服务器上。 要做到这一点,我做了一个代表控制台的FIFO,就像这样: rm -f console; mkfifo console 我不知道如何将这个FIFOredirect到这个过程中。 我正在阅读使用cat在一个像这样的while循环的fifo while true; do cat console; done 想到做这样的事情: while true; do cat console; done | exec java -jar server.jar 或者像这样的东西: exec java -jar server.jar < <(while true; do cat […]

附加一个docker集装箱的标准输出到另一个docker集装箱的标准input

我想将容器A中的脚本的标准输出传递给容器B的标准input,然后将容器B的标准输出传递给容器C的标准input。我想知道做同样的最佳做法是什么。 选项1 docker run -it ImageA python script1.py | docker run -it ImageB python script2.py | \ docker run -it Image3 python script3.py 选项2 使用共享卷来存储可被后续容器访问的数据。 docker run -it -v /home/shared_volume:/container1_home/shared_volume python script1.py docker run -it -v /home/shared_volume:/container2_home/shared_volume python script2.py docker run -it -v /home/shared_volume:/container3_home/shared_volume python script3.py 理想情况下,我宁愿不使用共享卷。 script1.py和script2.py的输出产生大约数TB的中间文件(或数据stream)。 我对这些文件不感兴趣,我宁愿将script3.py的结果存储到磁盘。