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

如何向Docker镜像中的游戏服务器标准输入发送命令

解决方案

一、Python 实现方案(跨Windows/Linux)

1. 使用 docker-python SDK

直接通过SDK的attach_socket实现双向通信,无需修改镜像,跨平台兼容:

import docker

# 初始化Docker客户端
client = docker.from_env()
# 获取目标容器(替换为你的容器名称或ID)
container = client.containers.get("game-server-container")

# 建立带stdin/stdout的连接
attach_conn = container.attach_socket(params={
    'stdin': True,
    'stdout': True,
    'stderr': False,
    'stream': True
})

# 发送status命令(必须加换行符触发执行)
attach_conn._sock.send(b'status\n')

# 读取并打印服务器状态输出
for chunk in attach_conn:
    print(chunk.decode('utf-8').strip())

# 关闭连接
attach_conn.close()

2. 使用 Python on Whales

封装更友好的API,代码更简洁:

from python_on_whales import docker

# 获取目标容器(替换为你的容器名称或ID)
container = docker.container.inspect("game-server-container")

# 开启交互式attach会话
with docker.container.attach(
    container.id,
    stdin=True,
    stdout=True,
    stderr=False,
    stream=True
) as streams:
    # 发送命令并刷新输入流
    streams.stdin.write(b'status\n')
    streams.stdin.flush()
    
    # 读取输出内容
    for line in streams.stdout:
        print(line.decode('utf-8').strip())

二、跨平台Shell方案

无需Python依赖,直接用原生Docker命令:

Linux/macOS(Bash)

# 发送status命令并读取输出,自动退出连接
(echo "status"; sleep 1) | docker attach game-server-container 2>/dev/null

Windows(PowerShell)

# 发送带换行符的命令到容器stdin
"status`n" | docker attach game-server-container

关键注意事项

  • 容器必须处于运行状态,且启动时未禁用stdin(默认开启,除非启动时指定--interactive=false)
  • 命令必须携带换行符(\n),模拟终端回车触发执行
  • 若需多次发送命令,保持attach连接打开即可,无需重复建立连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:43:30