Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Docker:在容器中运行的插口控制台上执行命令_Shell_Docker_Command Line_Stdin_Minecraft - Fatal编程技术网

Shell Docker:在容器中运行的插口控制台上执行命令

Shell Docker:在容器中运行的插口控制台上执行命令,shell,docker,command-line,stdin,minecraft,Shell,Docker,Command Line,Stdin,Minecraft,总结一下我遇到的问题: 我想在容器中运行的minecraft控制台上执行一个命令,就像我在交互模式下附加到它时一样,但不需要附加到它 docker-attach-container\u-name 命令 从容器中分离 类似于运行docker exec,但它会将命令放入在容器内运行的程序的stdin中,就像docker attach中一样 我只是简单地搜索一个具有相同功能的oneliner。像这样 编辑: echo'say test'| docker attach 给出了错误: 输入设备不是TTY

总结一下我遇到的问题: 我想在容器中运行的minecraft控制台上执行一个命令,就像我在交互模式下附加到它时一样,但不需要附加到它

docker-attach-container\u-name

命令

从容器中分离

类似于运行docker exec,但它会将命令放入在容器内运行的程序的stdin中,就像docker attach中一样

我只是简单地搜索一个具有相同功能的oneliner。像这样

编辑:
echo'say test'| docker attach

给出了错误:

输入设备不是TTY

编辑2: 在中删除容器链接上的-t标志后

echo'say test'| docker attach

该命令以日志显示的形式到达服务器,但在执行之后,我被困在一个空白输入中,因为该命令没有以某种方式停止

如果我现在执行双ctrl+c,容器将停止

编辑3:
我尝试在docker主机上执行这些命令,并在正在运行的spigot minecraft server中执行该命令显然,您可以使用命名管道来执行此操作,如下所示:

在Docker容器中 $mkfifo myfifo $java-jar minecraft_server.jar noguimyfifo

如前所述,注意不要意外发送EOF字符。

在标准Linux中无法执行此操作;我也不会在Docker尝试。网络(HTTP)接口是否更适合您的应用程序,这样您就可以发送it请求并返回响应,而无需尝试管理容器的stdin(也无需成为root用户才能与之交互)?谢谢您的回答!问题在于它不是一个自行开发的应用程序,而是一个minecraft服务器。我只想写到它的控制台。我编辑了这个问题,因此很明显这是一个minecraft服务器,而不是一个随机应用程序。这个答案很好,但不是我想要使用的答案,因为我需要重建映像,并且需要额外的逻辑来执行此操作。不幸的是,对您来说,写入服务器stdin的唯一方法是使用命名管道,这意味着您必须更改.jar的启动方式。不可能为一个进程“窃取”stdin,因为这会立即摧毁整个现代计算世界。是的,我明白:D唯一困扰我的事情是,当我设置-I和-t标志,手动附加并执行命令时,没有问题。但当我使用echo commd | container方法时,它说这不是tty设备。所以Docker使用stdin,但没有提供一种很好的写入方式。啊,等等,Docker容器是否已经用
nogui
启动了.jar,所以您只是想将
Docker
的stdin连接到.jar stdin?是的!我想把它写在我正在运行的插口容器的stdin上。
# in the Docker container
$ mkfifo myfifo
$ java -jar minecraft_server.jar nogui < myfifo

# via your `docker exec`
$ echo 'say test' > myfifo