You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从宿主机向Docker中运行的Minecraft服务器执行命令?

在Docker部署的Minecraft服务器中执行宿主机命令的正确方式

问题分析

你执行的docker-compose exec spigot echo "help" > /dev/pts/0只是将字符串写入终端设备,但Minecraft服务器的Java进程需要带换行符的完整输入才会触发命令执行,且直接写入终端设备并非向进程标准输入发送数据的正确方式,因此命令不会被执行。

解决方案

方法一:通过管道向进程标准输入发送带换行的命令

利用docker-compose exec的标准输入传递功能,发送包含换行符的命令:

echo -e "help\n" | docker-compose exec -T spigot sh -c 'cat > /proc/$(pgrep -f spigot-1.8.8.jar)/fd/0'
  • -T参数禁用伪终端,避免交互干扰
  • pgrep -f spigot-1.8.8.jar定位Minecraft服务器进程ID
  • /proc/<PID>/fd/0是进程的标准输入文件描述符,写入此处相当于向进程输入命令

更简化的写法(依赖容器内Java进程的stdin已正确关联):

echo -e "help\n" | docker-compose exec -T spigot cat >&0

方法二:使用RCON协议(推荐,稳定可靠)

Minecraft原生支持RCON远程命令协议,这是批量/自动化执行命令的最佳方式:

  1. 修改容器内server/server.properties配置文件:
    enable-rcon=true
    rcon.port=25575
    rcon.password=your-secure-password
    
  2. 在docker-compose.yaml中添加RCON端口映射(可选,方便宿主机直接访问):
    ports:
      - "25565:25565"
      - "25575:25575"
    
  3. 重启容器后,使用mcrcon(轻量RCON客户端)执行命令:
    mcrcon -H localhost -P 25575 -p your-secure-password "help"
    
    若未安装mcrcon,可通过包管理器(如apt install mcrcon或brew install mcrcon)安装。

方法三:用Expect脚本模拟交互

编写Expect脚本模拟手动输入命令的过程:

  1. 创建send_mc_cmd.exp脚本:
    #!/usr/bin/expect
    spawn docker-compose exec spigot sh
    send "help\r"
    expect eof
    
  2. 赋予执行权限并运行:
    chmod +x send_mc_cmd.exp
    ./send_mc_cmd.exp
    

内容的提问来源于stack exchange,提问作者Chaosdave34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:48:40