Docker on ArchWSL

Written by Rico Sta. Cruz
(@rstacruz) · 2 Apr 2021

Problem: Running Docker on ArchWSL doesn’t work by default. ArchWSL doesn’t allow systemd services.

Terminal window
docker info
# ERROR: Cannot connect to the Docker daemon
# at unix:///var/run/docker.sock. Is
# the docker daemon running?
Terminal window
sudo systemctl start docker
# System has not been booted with systemd as init
# system (PID 1). Can't operate.
# Failed to connect to bus: Host is down
Trying to use systemctl start on ArchWSL will result in an error.

Solution: genie-systemd

Update (June 2022): wsl-distrod is a better alternative to genie.

genie-systemd can be used to run systemd services like Docker. Note that Docker itself requires WSL2.

Terminal window
# Download genie-systemd from this page
open https://github.com/arkane-systems/genie/releases
# Install it
pacman -U genie-systemd*.pkg.tar.zst
# Run systemctl via genie
sudo genie -c systemctl start docker
Terminal window
# It should work now 🎉
docker info
# Containers: 1
# Server Version: 19.03.11-ce
# Storage driver: overlay2
# ...

Genie, or genie-systemd, is a workaround to run systemd services in WSL2. It can be installed by downloading the .tar.zst package from the project’s GitHub releases page.

Alternatives

Genie only works on WSL2. Not running WSL2? Here’s a guide on converting an WSL1 installation to WSL2.

I’ve found that genie works the best for my case. However, there are also other ways to get Docker and systemd working:

  • ArchWSL2 is a fork of ArchWSL with support for systemd.
  • The ArchWSL wiki has some resources in its Known issues page.
  • systemctl-alt is an alternate fork of systemd which will work with WSL1 and WSL2.

Written by Rico Sta. Cruz

I am a web developer helping make the world a better place through JavaScript, Ruby, and UI design. I write articles like these often. If you'd like to stay in touch, subscribe to my list.

Comments

More articles

← More articles