This image is originally inspirated by this gist.
The container use socat
to bound Docker socket to a TCP port, so that I could avoid to change
the http.Post
part in the Go server to talk directly to a UNIX socket.
You can launch the container in this way:
docker run \
--name docker-exec-web-console \
-p 9999:8888 \
-v /var/run/docker.sock:/var/run/docker.sock \
bitbull/docker-exec-web-console
Then you can reach the console at the url http://localhost:9999
It's possible to pass a context path to which the container will responds, using CONTEXT_PATH
environment variable:
docker run \
--name docker-exec-web-console \
-p 9999:8888 \
-e "CONTEXT_PATH=/webconsole" \
-v /var/run/docker.sock:/var/run/docker.sock \
bitbull/docker-exec-web-console
With the above example, the console will be reachable at the url http://localhost:9999/webconsole
You can select the container to exec into passing its id directly via cid
querystring parameter (
eg. http://localhost:9999?cid=<container id>
) or in the prompt that will show at page load.
You can pass the command to execute passing it via cmd
querystring parameter (
eg. http://localhost:9999?cid=<container id>&cmd=/bin/sh
), otherwise it default to /bin/bash
.
The image is based on alpine:latest
, so you need to compile the server for Linux with all libs
statically linked:
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
then you can build as usual:
docker build -t bitbull/docker-exec-web-console .