Sharing a Docker daemon with virtual machines
Docker, Windows, LinuxI was doing some testing on Windows for a command line tool last week that required a Docker daemon. I already had a Windows environment setup (minus Docker) on VirtualBox. The problem is VirtualBox does not handle nested virtualization well and my laptop was struggling with the virtual machines I needed already. Here are some easy steps to share a Docker daemon from your host machine with your VMs.
Host Machine
If your host machine is Windows, open your Docker settings and enable the "Expose Daemon on tcp://localhost:2375 without TLS" option and continue to the Virtual Machine section below. Linux users, continue reading:
- We need to edit the docker server configs, run
sudo vim /lib/systemd/system/docker.service
- On the
ExecStart
line add-H tcp://0.0.0.0:2375
to the end and save - Reload the service with
systemctl daemon-reload && sudo service docker restart
To verify you can visit http://localhost:2375/version
in a browser or curl http://localhost:2375/version
and get JSON output of your Docker Engine version.
Virtual Machine
Configuring your virtual machine to use your host machines Docker daemon requires access to that machine via the network and setting an environment variable, the process is nearly identical on Linux and Windows:
Windows:
set DOCKER_HOST=<host_IP>:2375 && docker run hello-world
Linux:
DOCKER_HOST=<host_IP>:2375 && docker run hello-world
You can, of course, permanently set your DOCKER_HOST
environment variable and user Docker as you would as if the daemon was running on your machine.