{"record":{"id":"e8d2e8e48192a26e","repo":"hashicorp/vagrant","slug":"docker-is-not-running-on-the-guest-vm","errorCode":null,"errorMessage":"Docker is not running on the guest VM.","messagePattern":"Docker is not running on the guest VM\\.","errorType":"exception","errorClass":"VagrantPlugins::DockerProvisioner::DockerError","httpStatus":null,"severity":"error","filePath":"plugins/provisioners/docker/provisioner.rb","lineNumber":39,"sourceCode":"        @logger = Log4r::Logger.new(\"vagrant::provisioners::docker\")\n      end\n\n      def provision\n        @logger.info(\"Checking for Docker installation...\")\n        if @installer.ensure_installed\n          if !config.post_install_provisioner.nil?\n            @logger.info(\"Running post setup provision script...\")\n            env = {\n                  callable: method(:run_provisioner),\n                  provisioner: config.post_install_provisioner,\n                  machine: machine}\n            machine.env.hook(:run_provisioner, env)\n          end\n        end\n\n        # Attempt to start service if not running\n        @client.start_service\n        raise DockerError, :not_running if !@client.daemon_running?\n\n        if config.images.any?\n          @machine.ui.info(I18n.t(\"vagrant.docker_pulling_images\"))\n          @client.pull_images(*config.images)\n        end\n\n        if config.build_images.any?\n          @machine.ui.info(I18n.t(\"vagrant.docker_building_images\"))\n          @client.build_images(config.build_images)\n        end\n\n        if config.containers.any?\n          @machine.ui.info(I18n.t(\"vagrant.docker_starting_containers\"))\n          @client.run(config.containers)\n        end\n      end\n\n    end","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/hashicorp/vagrant/blob/35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5/plugins/provisioners/docker/provisioner.rb#L21-L57","documentation":"Raised by the Docker provisioner after it calls `@client.start_service` and `@client.daemon_running?` still returns false. Everything before this point (install, post-install hook) succeeded; the failure is specifically that the docker daemon/service did not come up inside the guest - service masked, systemd not PID 1, storage-driver/kernel issues, or the daemon simply not listening yet when checked.","triggerScenarios":"`vagrant provision` with the docker provisioner on a guest where `systemctl start docker` fails or the socket/engine check times out: masked docker.service, non-systemd boxes (older init), missing iptables/kernel modules in the VM, daemon crash-looping (check journalctl).","commonSituations":"Boxes without systemd as init so start_service is a no-op; docker.service masked by a cloud image; /var/lib/docker corrupted or disk full; overlay2 unsupported on the guest kernel; daemon slow to start so the immediate check races it.","solutions":["Diagnose in the guest: `vagrant ssh -c 'systemctl status docker; sudo journalctl -u docker --no-pager | tail -50'`","Unmask/enable: `sudo systemctl unmask docker && sudo systemctl enable --now docker`, then re-provision","On non-systemd boxes, use a systemd-enabled base image (e.g. modern official ubuntu/centos boxes)","If the daemon is just slow, start it once (`vagrant ssh -c 'sudo systemctl start docker'`) and re-run `vagrant provision`"],"exampleFix":"# Guest - before\nsudo systemctl mask docker   # later provision fails with not_running\n\n# Guest - after\nsudo systemctl unmask docker\nsudo systemctl enable --now docker\n# then on host:\n# vagrant provision","handlingStrategy":"retry","validationCode":"# From the host, confirm the daemon is up before provisioning\nsystem(\"vagrant ssh -c 'sudo systemctl is-active docker'\") or\n  system(\"vagrant ssh -c 'sudo systemctl start docker'\")","typeGuard":null,"tryCatchPattern":"tries = 0\nbegin\n  env.cli(%w[provision])\nrescue VagrantPlugins::DockerProvisioner::DockerError => e\n  tries += 1\n  if e.message == \"Docker is not running on the guest VM.\" && tries < 3\n    system(\"vagrant ssh -c 'sudo systemctl start docker; sleep 5'\")\n    retry\n  end\n  raise\nend","preventionTips":["Use systemd-enabled boxes so docker can actually be service-managed","Ensure docker.service is not masked in your base image (`systemctl unmask docker`)","Give slow guests headroom: start docker once during box build so first provision is not racing daemon startup"],"tags":["docker","provisioning","vagrant","daemon","service-start"],"backgroundTag":"daemon-not-running","analyzedSha":"35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5","analyzedAt":"2026-08-21T13:34:32.514Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}