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

如何通过Docker Engine RESTful API启动容器交互式Shell?

解决Docker Exec API交互问题

你当前的问题出在curl没有开启终端交互模式,无法和Docker返回的raw-stream进行双向通信。要实现docker exec -it的等效效果,需要给第二个curl命令添加两个关键参数:

  • -t:强制分配伪终端(对应docker exec的-t)
  • -i:保持stdin打开(对应docker exec的-i)

修改后的启动exec实例的curl命令如下:

curl -it --unix-socket /run/docker.sock \
http/exec/853938b2621606f85c04409ec7e345b884d46b95985a4fca0e8ddf28e20e1f79/start \
-H "Content-Type: application/json" \
-d '{
    "Detach":false,
    "Tty":true
}'

为什么原来的命令不行?

当你设置Tty: true并请求非分离模式时,Docker会返回一个原始的字节流(application/vnd.docker.raw-stream),这个流需要直接绑定到你的终端才能支持交互。默认情况下curl不会把stdin/stdout/stderr和终端关联,加上-it参数后,curl会模拟终端环境,让你能和容器内的bash会话进行交互。

额外注意事项

  • 你使用的curl 7.85.0版本已经支持unix socket的终端交互特性,无需担心版本兼容问题。
  • 执行修改后的命令后,会直接进入容器的bash会话,退出时可使用exit命令或Ctrl+D。

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

相关产品推荐
方舟 Agent Plan

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

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