Install Docker directly in WSL without Docker Desktop

Daniel Garcia
May 15, 2025
Cover image for Install Docker directly in WSL without Docker Desktop

Introduction

I use Windows, mainly because I’m a nerd and I like CAD and 3D printing and I do a bit of gaming then and there, all of these require Windows.

But when it comes to coding, I really like Linux, specially Ubuntu. I’m used to deploying my services in Linux machines as well.

So for my development workflow I use docker devcontainers, which allow me to develop inside the same environment my app will be deployed in, ensuring a smooth experience and no conflicts.

In windows, there is an issue though, and that is that VSCode Dev Containers really don’t like the native Docker Desktop and the experience is horribly slow and impossible to work in. So you need to install WSL, which stands for Windows Subsystem for Linux, then enable WSL support in Docker Desktop and voila, dev containers working like a charm.

Why I decided to switch

This is really biased, but I’ve experienced multiple nuances with docker desktop, mainly:

  • A couple of times a year it would just crash or not start, which got me down the rabbit hole of tying to debug the issue and I lost a day on it.
  • While pressenting a nice UI, I’m used to the docker CLI, so I don’t use it at all and it consumes unnecessary resources
  • WSL integration is quite polished, but still, sometimes it would have issues
  • The space consumed by Docker Desktop became insane in my Windows system at one point, and after researching, the only way was to re-install Docker Desktop from scratch… so I decided to just delete it and move to docker in WSL.

I’ve found that running docker directly in WSL is smoother and lighter on my laptop’s resources, which, for local development, is so much nicer as my laptop battery lasts more.

In the end, installing Docker directly in WSL is quite easy, specially if you’re used to Docker CLI and Linux, so it was a no brainer.

How to install docker in WSL without installing docker desktop

Let’s get to it:

1. Uninstall any previous Docker installations

If you have Docker Desktop installed, proceed to uninstall it. You can do so by removing the app with the Windows “Remove Apps” utility

2. Install WSL if you don’t have it

WSL is quite easy to install, it’s outside the scope of this article though, so I won’t go into it here.

3. Modify the IP tables installations

If your are NOT on Ubuntu 22.04 or Debian 10 / 11, you can ignore this step

If you, like me, love Ubuntu and have version 22.04 as your WSL distro, you need to modify the IP tables file:

In your WSL terminal run:

sudo update-alternatives --config iptables

Then select option 1to switch to the legacy ip tables installations

4. Install Docker directly in WSL

Depending on your Linux distro there might be some changes to this process, so I advise you to go to the Docker installation docs and select yours.

For Ubuntu though, this is the latest process using apt:

  1. Install the docker repo
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. Install Docker using apt:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5. Add your user to the Docker group

sudo usermod -aG docker <your_username>

If the docker group wasn’t created automatically:

sudo addgroup docker

6. Update your DNS

WSL points the DNS server to your local machine in a weird but effective way. This is usually ok but I’ve found that sometimes I would have connectivity issues in my docker containers. So I recommend doing the following:

  1. Update your nameservers

Edit your resolv.conf file:

sudo nano /etc/resolv.conf

Change the existing nameserver to Cloudflare’s (1.1.1.1) or Google’s (8.8.8.8) DNS:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
# nameserver 10.255.255.254 -> commented this out

nameserver 1.1.1.1
  1. Stop resolv.conf from regenerating at boot

Edit /etc/wsl.conf:

sudo nano /etc/wsl.conf

Add [network] to it:

[boot]
systemd=true

# Added this line:
[network]

7. Done!

You can test your docker installation by running:

docker run hello-world
Tags:
wsl docker docker desktop ubuntu