Skip to content

Instantly share code, notes, and snippets.

@Athou
Last active November 15, 2024 13:25
Show Gist options
  • Save Athou/022c67de48f1cf6584ce6c194af71a09 to your computer and use it in GitHub Desktop.
Save Athou/022c67de48f1cf6584ce6c194af71a09 to your computer and use it in GitHub Desktop.
install docker in Debian 11/WSL2 without Docker Desktop
# install docker in Debian 11/WSL2
# uses systemd-genie since docker requires systemd but it's not available for WSL
# this is an alternative to Docker Desktop
# prerequisites
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install ca-certificates curl wget gnupg lsb-release apt-transport-https
# systemd-genie requires dotnet runtime, add Microsoft repo
wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O /tmp/packages-microsoft-prod.deb
sudo dpkg -i /tmp/packages-microsoft-prod.deb
rm /tmp/packages-microsoft-prod.deb
# add systemd-genie repo
sudo wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
sudo chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg
echo -e "deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/wsl-transdebian.list > /dev/null
# install systemd-genie
sudo apt-get update
sudo apt-get install systemd-genie
# install docker
curl https://get.docker.com | sh
# allow docker commands to be used without sudo
sudo usermod -aG docker $USER
# nftables is the default implementation of iptables on Debian but requires linux kernel 5.8+ which is not available on WSL2
# https://patrickwu.space/2021/03/09/wsl-solution-to-native-docker-daemon-not-starting/
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
# install docker-compose 1.x
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# run systemd-genie when wsl starts
echo "genie -i" >> ~/.bashrc
# restart wsl
exit
wsl --shutdown
wsl
docker run hello-world
@DominicWatts
Copy link

Had to install curl, wget and lsb_release
But otherwise worked! you saved me many hours

@regifraga
Copy link

Great, tks!

@edwardbeckett
Copy link

edwardbeckett commented May 12, 2023

Just a note: You don't need systemd-genie anymore. You can boot systemd automatically in WSL2
Just create an /etc/wsl.conf and set it to start on boot,

sudo touch wsl.conf && sudo echo -e "[boot]\nsystemd=true\n" >| /etc/wsl.conf && sudo shutdown -r now


after reboot

sudo systemctl list-unit-files --type=service

@atlemagnussen
Copy link

Thank you! Very useful

Guess you don't need to switch to iptables-legacy anymore
Just tested without and confirmed, the kernel is 5.15 now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment