Technotes for future me

Running Docker on WSL2 without Docker Desktop

This is a straight to the point guide on how to make Docker CE run fully on WSL2.

What you will get

  • A full-fledged Docker installation on WSL2
  • Docker Daemon automatic start without any crazy hacks

What you will not get

  • Docker Daemon sharing between Windows and WSL (i.e. you cannot run docker from Windows PowerShell)
  • Docker Daemon sharing between WSL distributions


I will consider that you already have WSL2 working, and you are using Ubuntu as your distribution. Guide

Install Docker CE on Ubuntu by following the official guide:

Ensures not older packages are installed

sudo apt-get remove docker docker-engine containerd runc

Ensure pre-requisites are installed

sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

Adds docker apt repository

echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" |
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Adds docker apt key

curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Refreshes apt repos

sudo apt-get update

Installs Docker CE

sudo apt-get install docker-ce docker-ce-cli

Perform the post-installation steps:

Ensures docker group exists

sudo groupadd docker

Ensures you are part of it

sudo usermod -aG docker $USER

Now, close your shell and open another for taking the group changes into account If you are running Ubuntu 22.04, you will also need to run the following command:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy

If you are running Windows 11, you can use a brand-new feature of WSL to start the Docker Daemon during the initialization. You only need to add:

command = "service docker start"

To your /etc/wsl.conf within your WSL distribution. Then, restart it with wsl.exe --shutdown. To verify that it works, you can run docker version. If you do not receive any permission denied error, you are good.


Last updated on 8 Sep 2022
Published on 8 Sep 2022
Edit on GitHub