Docker Desktop makes local container development easy, but its resource overhead and strict licensing terms lead many developers to seek a leaner alternative. Running Docker Engine directly inside WSL 2 gives you native Linux performance, total control over your setup, and zero licensing restrictions.
By exposing the Docker daemon over TCP, you can transform a single WSL 2 distribution into a shared container host—giving your Windows terminal and secondary WSL environments instant, seamless access to the exact same Docker engine.
Setting up WSL Docker Host
Install Docker Engine
sudo apt update && sudo apt upgrade -y && \
sudo apt install -y ca-certificates curl gnupg lsb-release && \
sudo install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && \
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \
sudo usermod -aG docker $USER && \
sudo systemctl enable --now docker
Override Docker’s systemd unit file
- Open the
docker.service
sudo systemctl edit docker.service
- Paste the following content
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375
Restart services
sudo systemctl daemon-reload && \
sudo systemctl restart docker
Setting WSL Docker Client
Install docker-ce-cli
sudo apt-get update && \
sudo apt-get install -y ca-certificates curl gnupg && \
sudo install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
sudo chmod a+r /etc/apt/keyrings/docker.gpg && \
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && \
sudo apt-get update && \
sudo apt-get install -y docker-ce-cli
Define DOCKER_HOST in ~/.zshrc
export DOCKER_HOST=tcp://127.0.0.1:2375
Verify
source ~/.zshrc && docker ps -a
Setting for Windows as Docker Client
Install docker-cli
winget install Docker.DockerCLI
Define DOCKER_HOST
[System.Environment]::SetEnvironmentVariable('DOCKER_HOST', "tcp://127.0.0.1:2375", 'User')
$Env:DOCKER_HOST="tcp://127.0.0.1:2375"
Verify
docker ps -a
Bonus for Testcontainer
Disable RYUK
For WSL
export TESTCONTAINERS_RYUK_DISABLED = true
For Window
[System.Environment]::SetEnvironmentVariable('TESTCONTAINERS_HOST_OVERRIDE', "127.0.0.1", 'User') && `
[System.Environment]::SetEnvironmentVariable('TESTCONTAINERS_RYUK_DISABLED', "true", 'User') && `
$Env:TESTCONTAINERS_HOST_OVERRIDE="127.0.0.1" && `
$Env:TESTCONTAINERS_RYUK_DISABLED="true" && `
Top comments (0)