DEV Community

Kim CH
Kim CH

Posted on

How to Share Docker Across Multiple WSL 2 Distros and Windows (Without Docker Desktop)

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
Enter fullscreen mode Exit fullscreen mode

Override Docker’s systemd unit file

  1. Open the docker.service
sudo systemctl edit docker.service
Enter fullscreen mode Exit fullscreen mode
  1. Paste the following content
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375
Enter fullscreen mode Exit fullscreen mode

Restart services

sudo systemctl daemon-reload && \
sudo systemctl restart docker
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Define DOCKER_HOST in ~/.zshrc

export DOCKER_HOST=tcp://127.0.0.1:2375
Enter fullscreen mode Exit fullscreen mode

Verify

source ~/.zshrc && docker ps -a
Enter fullscreen mode Exit fullscreen mode

Setting for Windows as Docker Client

Install docker-cli

winget install Docker.DockerCLI
Enter fullscreen mode Exit fullscreen mode

Define DOCKER_HOST

[System.Environment]::SetEnvironmentVariable('DOCKER_HOST', "tcp://127.0.0.1:2375", 'User')

$Env:DOCKER_HOST="tcp://127.0.0.1:2375"
Enter fullscreen mode Exit fullscreen mode

Verify

docker ps -a
Enter fullscreen mode Exit fullscreen mode

Bonus for Testcontainer

Disable RYUK

For WSL

export TESTCONTAINERS_RYUK_DISABLED = true
Enter fullscreen mode Exit fullscreen mode

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" && `
Enter fullscreen mode Exit fullscreen mode

Top comments (0)