From c83ca750e19233fe02e43f6ebbf8c27134772649 Mon Sep 17 00:00:00 2001 From: wancat Date: Sat, 22 Jul 2023 16:35:44 +0800 Subject: [PATCH] Connect to different shell --- server/src/api/socket.js | 2 +- server/src/utils/docker.js | 34 ++++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/server/src/api/socket.js b/server/src/api/socket.js index d8c1379..e66fc2a 100644 --- a/server/src/api/socket.js +++ b/server/src/api/socket.js @@ -22,6 +22,6 @@ export default (server) => { console.log('Disconnected from the client.') }) - socket.send('Hello from server!') + socket.send(`${container.id}\n`) }) } diff --git a/server/src/utils/docker.js b/server/src/utils/docker.js index 1095d38..d6b56ac 100644 --- a/server/src/utils/docker.js +++ b/server/src/utils/docker.js @@ -13,6 +13,20 @@ const containerOptions = { StdinOnce: false, } +export async function createContainer() { + const container = await engine.createContainer({ + ...containerOptions, + }) + await container.start() + return container +} + +export async function getContainer(id) { + const container = await engine.getContainer(id) + await container.start() + return container +} + export async function getOrCreateContainer(name) { try { const container = engine.getContainer(name) @@ -31,12 +45,20 @@ export async function getOrCreateContainer(name) { } } -export function attachContainer(container) { +export async function attachContainer(container) { // Create an exec instance with bash shell - return container.attach({ - stream: true, - stdin: true, - stdout: true, - stderr: true, + const exec = await container.exec({ + AttachStdin: true, + AttachStdout: true, + AttachStderr: true, + Cmd: ['/bin/bash'], + Tty: true, }) + + const execOutput = await exec.start({ + Detach: false, + Tty: true, + }) + + return execOutput.socket }