mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-10-28 15:51:26 +00:00
feat: interactive terminal — WS-bridged docker exec PTY
GET /services/:id/terminal upgrades to a WebSocket attached to a `docker exec` PTY in the service's running replica. JSON frames both ways: stdin/resize out, stdout/exit/error in. Shell probe tries each candidate (bash→sh) since `command -v` needs a shell to run; distroless images get a clean "no shell" error instead of an OCI failure dump. - docker.Client gains ExecAttach + ExecResize wrappers - Frontend: xterm.js replaces the one-off console section — live PTY, fit-addon resizes forwarded over the socket - CLI: `containr shell <id>` bridges the local TTY (raw mode, SIGWINCH resize forwarding); `containr exec` keeps the one-off command path - Access mirrors service logs: project manage scope required Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
5eac4a382b
commit
a634e6960c
13 files changed
+570
-75
No files matched your search
@@ -720,6 +720,35 @@ paths:
|
||||
items:
|
||||
type: string
|
||||
|
||||
/services/{id}/terminal:
|
||||
get:
|
||||
tags:
|
||||
- Services
|
||||
summary: Interactive terminal (WebSocket)
|
||||
description: >-
|
||||
Upgrades to a WebSocket bridged to a `docker exec` PTY in the
|
||||
service's running container (bash if present, else sh).
|
||||
Cookie/bearer auth as usual.
|
||||
Client→server JSON frames: `{"type":"stdin","data":"..."}`,
|
||||
`{"type":"resize","cols":N,"rows":N}`.
|
||||
Server→client frames: `{"type":"stdout","data":"..."}`,
|
||||
`{"type":"exit","code":N}`, `{"type":"error","message":"..."}`.
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
'101':
|
||||
description: Switching protocols — WebSocket session established
|
||||
'404':
|
||||
description: Service not found or not visible
|
||||
'409':
|
||||
description: Service has no running container
|
||||
'503':
|
||||
description: Docker unavailable
|
||||
|
||||
/internal/wake/{id}:
|
||||
get:
|
||||
tags:
|
||||
|
||||
@@ -86,6 +86,8 @@ operations live ops view: active deploys, queue depth,
|
||||
24h failures, cron runs, backups
|
||||
activity enriched activity feed; --severity/--category/
|
||||
--resource/--project/--limit filters
|
||||
shell <service-id> interactive PTY shell inside the service
|
||||
container (bash→sh fallback; resizes follow)
|
||||
banners list|create|update|delete announcement banners (admin);
|
||||
active banners print on `auth status`
|
||||
invites list|create|revoke team invite links (admin); create
|
||||
|
||||
Reference in new issue
Block a user