One difference is that Vagrant is a full stand-alone server VM rather than a shared container like Docker, so Vagrant is better for housing multiple services in a single Vagrant instance, while Docker is better off housing a single-use application/service.
Example: If you wanted to run a complex local dev environment with apache, mysql, memcache, varnish, etc... You could run that all in a single large VM (provisioned and booted by Vagrant) or by multiple Docker containers (one for each service).