I use docker for my build system for this very reason, as my chain depends on a difficult to install Autodesk SDK, which requires a very specific version of Python. I don't expect it to work properly on most modern Linux distributions without virtualenv and other advanced trickery, and there's not even a chance on Windows. With Docker though, once I had the environment set up, unfamiliar newcomers on the three major platforms can then compile and run the project with minimal fuss.
(Of course, in the future I'll be working to remove that odd dependency entirely, but for now, this works.)
It helps that in my particular case, the build _target_ is an embedded platform, so I don't need to worry about native details in the final executable; hiding the environmental details in the container doesn't matter all that much.