https://github.com/taskcluster/docker-exec-websocket-server
A server that serves the results of docker exec over websockets.
https://github.com/taskcluster/docker-exec-websocket-server
Last synced: 2 months ago
JSON representation
A server that serves the results of docker exec over websockets.
- Host: GitHub
- URL: https://github.com/taskcluster/docker-exec-websocket-server
- Owner: taskcluster
- License: mpl-2.0
- Created: 2015-06-02T19:40:18.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2023-07-19T09:20:47.000Z (almost 3 years ago)
- Last Synced: 2025-10-16T18:35:42.521Z (8 months ago)
- Language: JavaScript
- Homepage:
- Size: 317 KB
- Stars: 20
- Watchers: 8
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# docker-exec-websocket-server
## Purpose
A server that serves the results of docker exec over websockets.
See `docker-exec-websocket-client` for a client that communicates with this server.
## Usage
Server:
```js
var DockerServer = require('../lib/server.js');
var dockerServer = new DockerServer({
port:8080, //automatically creates http server
//OR
server: //http.Serv object, can also be https, should already be listening
path: '/'+slugid.v4(), //Path to WebSocket
containerId: 'servertest', //Container to inject exec proccess into
dockerSocket: '/var/run/docker.sock' //location of docker remote API socket
maxSessions: 10 //maximum number of connected sessions
});
await dockerServer.execute();
```
By default, uses `/var/run/docker.sock` to communicate with Docker.
## Message Types
Messages are prepended with a single byte which contains information about the encoded message. The payload is a `Buffer` in node, or a `UInt8Array` in browserify.
```js
// stream related message types (carries a payload)
stdin: 0,
stdout: 1,
stderr: 2,
// data-flow related message types (carries no payload)
resume: 100, // Process is now ready to receive data
pause: 101, // Process is processing current data, don't send more right now
// resolution related message types
stopped: 200, // Process exited, payload is single byte exit code
shutdown: 201, // Server shut down
error: 202 // Some internal error occurred, expect undefined behaviour
```
## Testing
Ensure Docker is installed (``docker -v``).
To test locally:
* Run ``yarn install`` to install the dependencies, including developer dependencies
* Run ``yarn test``
* You can pass environment variables and commands to mocha as well, such as ``DEBUG=* yarn test -f 'docker exec wc'``
To test with ``docker-compose``, similar to CI:
* Run ``docker-compose build --build-arg NODE_VERSION=16-bullseye``, or change to the desired
[Node.js image tag](https://hub.docker.com/_/node/)
* Run ``docker-compose run --rm test``
* Repeat ``docker-compose build ...`` when the code changes or you want to try a different Node.js image.