通过 websocket 附加 docker 容器的 stdin

Thy*_*rel 6 api input websocket docker

我正在使用 chrome websocket 客户端扩展附加到一个正在运行的容器,调用 Docker 远程 API,如下所示:

ws://localhost:2375/containers/34968f0c952b/attach/ws?stream=1&stdout=1
Run Code Online (Sandbox Code Playgroud)

容器从我的机器本地启动,在等待用户输入的图像中执行 jar。基本上我想从网络浏览器的输入字段提供这个输入。

虽然我能够使用 API 端点进行附加,但我遇到了一些问题 - 可能是由于我对 ws 端点的缺乏了解以及糟糕的文档 - 我想解决这些问题:

1) 使用chrome websocket 客户端扩展发送数据时,根据网络检测工具,该帧似乎是通过websocket 传输的。但是,在容器中运行的等待输入的进程只在 websocket 连接关闭时接收发送的数据 - 一次完成。这是标准行为吗?直观地,您会期望输入立即发送到流程。

2) 如果我同时附加到 stdin 和 stdout,docker 守护进程会卡住等待附加 stdin,导致看不到任何输出:

[debug] attach.go:22 attach: stdin: begin
[debug] attach.go:59 attach: stdout: begin
[debug] attach.go:143 attach: waiting for job 1/2
[debug] server.go:2312 Closing buffered stdin pipe
[error] server.go:844 Error attaching websocket: use of closed network connection
Run Code Online (Sandbox Code Playgroud)

我已经解决了为 stdin 和 stdout 打开两个单独连接的问题,这可行,但真的很烦人。关于这个有什么想法吗?

提前致谢!