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

Docker API执行Exec命令返回乱码字节问题排查求助

问题排查:Docker API Exec响应开头乱码

问题背景

通过Postman调用Docker API 1.41执行容器内命令,获取/sbin目录下文件的哈希值与大小,命令可正常执行,但响应开头出现乱码字节。

创建Exec实例请求

POST http://localhost:2375/v1.41/containers/{containerid}/exec

请求体:

{
  "AttachStdin": false,
  "AttachStdout": true,
  "AttachStderr": true,
  "DetachKeys": "ctrl-p,ctrl-q",
  "Tty": false,
  "Cmd": [
    "sh", 
    "-c",
    "find /sbin/* -type f -print0 | xargs -0 sh -c 'paste -d \" \" <(md5sum \"$@\") <(sha1sum \"$@\") <(sha256sum \"$@\") <(du -lh \"$@\")' bash | tr -s ' ' | cut -d ' ' -f 1,3,5,6"
  ]
}

创建结果

{
    "Id": "5243df9ea1d665d5eef78593c8d1031e4a3c61feb20267a974119a7f70d87d24"
}

启动Exec命令请求

POST http://localhost:2375/v1.41/exec/5243df9ea1d665d5eef78593c8d1031e4a3c61feb20267a974119a7f70d87d24/start

请求体:

{
  "Detach": false,
  "Tty": false
}

执行结果(含乱码)

锟絚bf83b97caceaeb98d449946cda46dba 3f5a14046fd530c8679dd7f67c15ec6570631d51 7995d69305583789568e85eeac0abf0c3c7166c4edb53afc5910e57ff0b37650 /sbin/apk 5830d01f7821b978df770b06db3790921 2a36b6f8f3992b112450e66ac128c2ea499a103e b4a2c06db38742e8c42c3c9838b285a7d8cdac6c091ff3df5ff9a15f1e41b9c7 /sbin/ldconfig 90292714bf3b5d86c997f10f64f92a50 f9ff078ddf9d9074b4dcee9965a230ee66fc9cb3 ab0f9ffe6fb1064ed2736c8191f841daaf54700f5e7b670e56fca7d7855dece8 /sbin/mkmntdirs

原因分析

Docker Exec API的响应采用多路复用二进制流格式,并非纯文本。开头的乱码是Docker添加的8字节帧头:

  • 前4字节:标识流类型(1=stdout,2=stderr)
  • 后4字节:大端字节序的后续内容长度
    Postman直接将二进制帧头当作UTF-8文本解析,导致出现乱码。

解决方法

方法1:使用Docker官方SDK处理

使用Docker官方提供的SDK(如Python/Go SDK)发送请求,SDK会自动解析二进制帧头,分离stdout和stderr内容,无需手动处理。

方法2:手动解析帧头

如果必须用Postman或自定义工具处理,需要手动解析二进制响应:

  1. 读取响应的前8字节二进制数据
  2. 解析出流类型和内容长度
  3. 跳过这8字节,读取后续对应长度的文本内容,即为实际命令输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:10:32