In order to facilitate attach operations for a running container, we plan to introduce a new component into Mesos known as an “I/O switchboard”. The goal of this switchboard is to allow external components to dynamically interpose on the stdin, stdout and stderr of the init process of a running Mesos container. It will be implemented as a per-container, stand-alone process launched by the mesos containerizer at the time a container is first launched.
Each per-container switchboard will be responsible for the following:
- Accepting a single dynamic request to register an fd for streaming data to the stdin of a container’s init process.
- Accepting multiple dynamic requests to register fds for streaming data from the stdout and stderr of a container’s init process to those fds.
- Allocating a pty for the new process (if requested), and directing data through the master fd of the pty as necessary.
- Passing the actual set of file descriptors that should be dup’d onto the stdin, stdout and stderr of a container’s init process back to the containerizer.
The idea being that the switchboard will maintain three asynchronous loops (one each for stdin, stdout and stderr) that constantly pipe data to/from a container’s init process to/from all of the file descriptors that have been dynamically registered with it.