Just out of curiosity, can't this be implemented with `nvm` and some sand boxing? Why did you choose to use docker?
The first is that nvm is nodejs specific and since I knew I wanted it to eventually work with multiple languages, nvm is out.
Second is that docker has a API I can work with (via Dockerode in this case), makes it easier to use/debug and such.
Third is the easy of isolation. It's basically what docker is about while nvm is more for just managing versions.
I still use nvm locally, when developing. But when I want to rapidly test in multiple versions, I use docker with autochecker.