Linux Containers, which docker makes use of, are more like creating a "clone" of the currently running operating system with a boxed-in filesystem (and device-space?).
You can't run a Windows container on a Linux host; neither can you run a Solaris container on a Linux host; ad nausium.
With VMs, you can run whatever you want on whatever you want, assuming the processor architecture is compatible.