Usar Docker Engine en Windows (sin Docker Desktop)
Introducción
Esta guía explica cómo instalar y usar Docker Engine (el daemon de Docker para Linux) en un PC con Windows 10/11 a través de WSL2, sin instalar Docker Desktop.
¿Por qué Docker Engine y no Docker Desktop?
- Docker Engine: es el daemon + CLI “clásico” de Linux; libre (Apache 2.0).
- Docker Desktop: añade GUI e integraciones, pero su licencia puede requerir suscripción en ciertos usos empresariales.
Objetivo: correr Docker Engine dentro de Ubuntu (WSL2) y manejarlo desde la terminal de esa distro o, opcionalmente, desde PowerShell apuntando al daemon de WSL2.
Requisitos previos
- Windows 10/11 con WSL2 habilitado.
- Ubuntu instalado en WSL2.
- Permisos de administrador para una vez (activar WSL).
- Conexión a Internet para instalar paquetes.
Arquitectura recomendada
Windows
└─ WSL2 (Ubuntu)
├─ systemd (habilitado)
└─ Docker Engine (dockerd) + docker CLI + buildx + compose v2
Consejo: desarrolla dentro del sistema de archivos de WSL (
~/project) para mejor rendimiento que en/mnt/c/....
Instalación paso a paso
1) Activar WSL2
Ejecuta en PowerShell (Administrador):
wsl --install
# Si ya lo tienes:
# wsl --update
# wsl --set-default-version 2
Instala Ubuntu desde Microsoft Store (o wsl --install -d Ubuntu).
2) Habilitar systemd en WSL
En Ubuntu (WSL):
sudo nano /etc/wsl.conf
Añade:
[boot]
systemd=true
Luego en PowerShell:
wsl --shutdown
Vuelve a abrir Ubuntu.
3) Instalar Docker Engine (repo oficial)
En Ubuntu (WSL):
sudo apt-get update
sudo apt-get 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
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 $UBUNTU_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4) Arrancar y habilitar Docker
sudo systemctl enable --now docker
systemctl status docker
5) Usar Docker sin sudo
sudo usermod -aG docker $USER
newgrp docker
Prueba:
docker run hello-world
Usar Docker desde Windows
Opción A — Simple: usar la terminal de Ubuntu (WSL)
Abre Ubuntu y ejecuta docker .... Accede a tu app en http://localhost:<puerto> si publicas puertos con -p.
Opción B — PowerShell apuntando al daemon de WSL (avanzado)
Solo si lo necesitas. Exponer el daemon por TCP sin TLS es un riesgo, úsalo en entornos controlados.
En Ubuntu:
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
Contenido:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
"experimental": true
}
Reinicia:
sudo systemctl restart docker
En PowerShell:
$env:DOCKER_HOST="tcp://127.0.0.1:2375"
docker info
Seguridad: evita exponer
2375si no es imprescindible. Prefiere la Opción A.
Docker Compose v2
Ya viene como subcomando:
docker compose version
docker compose up -d
Buenas prácticas y rendimiento
- Trabaja en
~/projects/...dentro de WSL para builds más rápidos. - Publica puertos con
-p 8080:80y usa0.0.0.0en tu app dentro del contenedor. - Activa BuildKit si lo necesitas:
export DOCKER_BUILDKIT=1 docker build -t myimage .
Solución de problemas
-
Cannot connect to the Docker daemonsystemctl status dockersudo systemctl restart docker- Confirma
systemd=trueen/etc/wsl.confywsl --shutdown.
-
Pide
sudo- Asegúrate de estar en el grupo
docker:groups→ debe incluirdocker. - Ejecuta
sudo usermod -aG docker $USERynewgrp docker.
- Asegúrate de estar en el grupo
-
Puertos inaccesibles
- Asegura
-p host:container. - Accede desde Windows a
http://localhost:<puerto>.
- Asegura
FAQ
- ¿Necesito Docker Desktop? No, con WSL2 + Docker Engine es suficiente.
- ¿Compose v2? Sí, es
docker compose, nodocker-compose. - ¿VS Code? Usa Remote - WSL para trabajar dentro de Ubuntu (WSL).
- ¿Coste? Docker Engine es OSS; evitas la licencia de Docker Desktop.