I like running Docker containers in WSL2. However, one piece of nuisance for me has been that the Docker daemon doesn’t automatically start, and there’s no ‘easy’ way to start it automatically. Since WSL2 doesn’t run systemd, you cannot use systemd to automatically start Docker as you typically would in a Linux system.
In this post I’ll explore one way using which this can be done in WSL2 (and I assume this works for WSL1 as well, but I haven’t tested that).
Details of the system I’m running this on:
- WSL2 on top of Windows 10
- Ubuntu 18.04
- Running zsh shell
Automatically start Docker daemon on WSL2
First, you’ll need to install Docker.
sudo apt update
sudo apt install docker.io -y
With Docker installed, we’ll now need a way to run the Docker daemon automatically at boot time. One way this can be done is to run the command to execute to Docker daemon at boot time via your profile file. To do this without your command line prompting for passwords, run the following command:
sudo visudo
This will open your /etc/sudoers
file, which controls how sudo
command are executed. We’ll want to allow our user to start dockerd
without being prompted for a password. Add the following line to the bottom:
nilfranadmin ALL=(ALL) NOPASSWD: /usr/bin/dockerd
(replace nilfranadmin
with your username, unless you want to give me access to your system 🤣).
Now, we will update our profile file to automatically run the docker daemon if it’s not running yet. This can be done by adding the following lines to your profile. Please note, I’m using the zsh
shell. If you’re using bash (like most people), you’ll need to change .zshrc
by .bashrc
.
echo '# Start Docker daemon automatically when logging in if not running.' >> ~/.zshrc
echo 'RUNNING=`ps aux | grep dockerd | grep -v grep`' >> ~/.zshrc
echo 'if [ -z "$RUNNING" ]; then' >> ~/.zshrc
echo ' sudo dockerd > /dev/null 2>&1 &' >> ~/.zshrc
echo ' disown' >> ~/.zshrc
echo 'fi' >> ~/.zshrc
Finally, add your username to the docker group, so you don’t need to use sudo to run Docker commands.
sudo usermod -a -G docker $USER
Logout and log back in (or open a new terminal) for all changes to take effect. With the changes in effect, you should be able to run:
docker run hello-world
And see the hello-world from Docker.
Summary
This was a short post, explaining how to setup your WSL system to automatically start Docker when you open your terminal. It’s a bit of a hacky solution, but it’ll make starting the Docker daemon a bit easier.