Cómo achicar el disco de Docker Desktop cuando se usa GeneXus Next (WSL2 en Windows)

Contexto: GeneXus Next usa Docker Desktop sobre WSL2. Con el tiempo, el archivo de disco virtual de Docker (“ext4.vhdx” o “docker_data.vhdx”) crece y no se achica solo aunque borres imágenes.
Al cambiar de versión (en la fase beta se hace muy a menudo) se crean imágenes y contenedores que luego se dejan de usar, pero a veces no libera el espacio.
En mi caso, pude recuperar 28 Gb con la limpieza. 

¿Por qué pasa?

Docker Desktop guarda sus datos en una distro WSL2 (docker-desktop-data) dentro de un disco virtual dinámico .vhdx que crece cuando necesitás más espacio, pero no reduce tamaño automáticamente al liberar datos.

Rutas típicas del VHDX

  • %LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx (clásico)
  • %LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx (nombres nuevos)

Tip: En Docker Desktop podés ver o cambiar Settings → Resources → Advanced → Disk image location y el tamaño máximo.


Paso a paso

Recomendación: hacé una copia del .vhdx antes de compactar.
  1. Liberá espacio dentro de Docker

    docker system df
    docker system prune -a --volumes

    Esto borra imágenes huérfanas, contenedores detenidos, redes y volúmenes no usados.

  2. Cerrá Docker Desktop (tray icon → Quit Docker Desktop).

  3. Apagá WSL (PowerShell como Administrador):

    wsl --shutdown
  4. Compactá el VHDX (elegí una):

    Opción A – Optimize-VHD (Windows Pro/Enterprise con herramientas Hyper-V):

    PowerShell (Administrador)
    
    $Vhdx = "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx"   # Ajustá si usás \disk\docker_data.vhdx
    Optimize-VHD -Path $Vhdx -Mode Full

    Opción B – DiskPart (sirve en cualquier edición de Windows):

    PowerShell (Administrador)
    
    $Vhdx = "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx"
    
    $dp = @"
    select vdisk file="$Vhdx"
    attach vdisk readonly
    compact vdisk
    detach vdisk
    exit
    "@
    
    $tmp = New-TemporaryFile
    Set-Content -LiteralPath $tmp -Value $dp -Encoding ASCII
    diskpart /s $tmp
    Remove-Item $tmp -Force
  5. Reiniciá Docker Desktop y verificá:

    docker ps
  6. Comprobá el ahorro mirando el tamaño del archivo antes/después (Propiedades del archivo).



Comentarios

Entradas más populares de este blog

Migrando de GeneXus 9.0 a GeneXus X.

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?