我试图弄清楚为什么 dockerode 流将写入流的所有数据直接定向到流的输出。
这就是我创建容器的方式,我在对象上调用.write()
方法。this.stream
this.container = await this.dockerConnection.createContainer({
Image: this.image,
Tty: true,
Cmd: cmd,
HostConfig: {
NetworkMode: "none",
Binds: [this.mountPath + ":/home/appuser/workdir"],
},
OpenStdin: true,
StdinOnce: false,
AutoRemove: true,
});
this.stream = await this.container.attach({
stream: true,
stdin: true,
stdout: true,
stderr: true,
});
await this.container.start();
但是,在将此流连接到连接到 xterm.js 的 websocket 后,我注意到如果我/bin/sh
通过cmd
参数启动 shell 并写入结果,我运行的命令会在侦听this.stream
器上回显给我。this.stream.on("data", ...)
例如,如果我写ls\n
,传入的数据.on("data",...)
看起来像
ls
bin/ etc/ lib/ ... (etc.)
如何防止它ls
向我回显“”?
这是在服务器上进行流写入和读取的代码:
let sb = new Sandbox("alpine-sandbox");
let stream = await sb.launchSHShell();
stream.on("data", (data) => {
socket.emit("response", data.toString());
})
socket.on("command", (cmd) => {
stream.write(cmd);
})