Как скопировать возвращаемое значение интерактивного процесса из docker в WebSocket? - PullRequest
0 голосов
/ 30 января 2020

Я записываю данные из веб-браузера в интерактивный процесс (python) на docker через WebSocket и Docker SDK.

Данные: веб-браузер <-> Сервер <-> Docker (интерактивный процесс)

Я хочу получить вывод python. Например. ввод 1 + 1, затем я хочу получить 2.

Проблема в том, что я получаю первую возвращаемую строку (строка за строкой). В этом примере это

�Python 3.7.4 (default, Aug 13 2019, 20:35:49)

[GCC 7.3.0] :: Anaconda, Inc. on linux

import (
"fmt"
"github.com/gorilla/websocket"
"net/http")

var upgrader = websocket.Upgrader{}

func echo(w http.ResponseWriter, r *http.Request) {
upgrader.CheckOrigin = func(r *http.Request) bool { return true }

conn, err := upgrader.Upgrade(w, r, nil) // error ignored for sake of simplicity
if err != nil {
    panic(err)
}

resp := StartRuntime([]string{"python"})

for {
    // Read message from browser
    msgType, msg, err := conn.ReadMessage()
    if err != nil {
        panic(err)
    }

    resp.Conn.Write(msg)

    dockermsg, err := resp.Reader.ReadBytes(byte('\n')) <--I think I need to modify this line, but I am not sure how.
    if err != nil {
        panic(err)
    }

    fmt.Print(string(dockermsg))
    err = conn.WriteMessage(msgType, dockermsg)
    if err != nil {
        panic(err)
    }
}
} 

func StartRuntime(cmd []string) types.HijackedResponse {
cli, ctx := getClient()

containerID := "9fba076ba45b0c29f8787ee0031ff12186a870461356e79da8fff8e3eaddc62d"

cli.ContainerStart(ctx, containerID, types.ContainerStartOptions{})

execID, _ := cli.ContainerExecCreate(ctx, containerID, types.ExecConfig{Cmd: cmd,
    AttachStdin:  true,
    AttachStdout: true,
    AttachStderr: true,
    Tty:          true})

resp := getResponse(execID.ID)

return resp
}

func getResponse(id string) types.HijackedResponse {
cli, ctx := getClient()

resp, err := cli.ContainerExecAttach(ctx, id, types.ExecStartCheck{})
if err != nil {
    panic(err)
}
return resp
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...