I'm looking for a way for a user to be able to execute a limited set of commands on the host, while only accessing it from containers/browser. The goal is to prevent the need for SSH'ing to the host just to run commands occasionally like make start
, make stop
, etc. These make
commands just execute a series of docker-compose
commands and are needed sometimes in dev.
The two possible ways in I can think of are:
- Via cloud9 terminal inside browser (we'll already be using it). By default this terminal only accesses the container itself of course.
- Via a custom mini webapp (e.g. node.js/express) with buttons that map to commands. This would be easy to do if running on the host itself, but I want to keep all code like this as containers.
That approach would be against the docker concepts of process/resources encapsulation. With docker you encapsulate processes completely from the host and from each other (unless you link containers/volumes). From within a docker container you cannot see any processes running on the host due to process namespaces. When you now want to execute processes on the host from within a container that would be against the docker methodology.
A container is not supposed to break out and access the host. Docker is (amongst other things) process isolation. You may find various tricks to execute some code on the host, when you set it up, though.
Although it might not be best practice it is still possible to control the host from inside a container. If you are running docker-compose commands you can bind mount the docker socket by using
-v /var/run/docker.sock:/var/run/docker.sock
on ubuntu. If you want to use other system tools you will have to bind mount all required volumes using-v
this gets really tricky and tedious when you want to use system bins that use/lib.*.so
files.If you need to use
sudo
commands don't forget to add--privileged
flag when running the container