Obsah

Zrychlení Docker devcontaineru na Windows přes WSL2

Vytvořeno: 4.7.2026 | Aktualizováno: 04.07.2026 13:32

Docker Desktop s WSL 2 backendem umožňuje na Windows provozovat Linux kontejnery nad WSL2. Pokud je ale projekt uložený na Windows disku a do Dev Containers se připojuje přes bind mount, mohou být diskové operace v kontejneru extrémně pomalé. Tento návod popisuje ověřený postup z pracovní OpenCode konverzace: přesunout workspace z Windows filesystemu do WSL2 Ubuntu filesystemu a teprve nad ním spustit Cursor/devcontainer.

Cíl

Původní stav:

Windows filesystem:
C:\cursor-ai
 
Docker kontejner:
/home/ubuntu  <- bind mount z C:\cursor-ai

To bývá velmi pomalé, protože kontejner při práci se soubory sahá přes překladovou vrstvu Windows → Linux.

Cílový stav:

WSL2 Ubuntu filesystem:
/home/panhe/cursor-ai
 
Docker kontejner:
/home/ubuntu  <- bind mount z /home/panhe/cursor-ai

Data zůstávají mimo kontejner, přežijí rebuild kontejneru a zároveň se s nimi pracuje přes rychlý Linux filesystem.

Architektura

Po migraci jsou na Windows počítači dvě různé Linux vrstvy:

Windows
├─ WSL2 Ubuntu
│  └─ /home/panhe/cursor-ai
│     = fyzické místo, kde leží projektová data
│
└─ Docker Desktop
   └─ Docker devcontainer Ubuntu
      └─ /home/ubuntu
         = vývojové prostředí, kam se data z WSL bind-mountují

WSL Ubuntu není Docker kontejner. Je to Linux distribuce běžící přes WSL2.

Docker kontejner je samostatné prostředí, které používá Docker Desktop. WSL Ubuntu slouží hlavně jako rychlý Linux filesystem a jako místo, odkud Cursor/Dev Containers spouští Docker příkazy. Docker kontejner je skutečné vývojové prostředí podle Dockerfile.

Proč nestačí Cursor připojený do kontejneru

Pokud je v devcontainer.json nastavený bind mount:

"mounts": [
  "source=${localWorkspaceFolder},target=/home/ubuntu,type=bind"
]

záleží na tom, odkud Cursor otevřel projekt.

Pokud Cursor otevře projekt z Windows cesty:

C:\cursor-ai

mountuje se do kontejneru Windows filesystem.

Pokud Cursor otevře projekt přes WSL cestu:

/home/panhe/cursor-ai

mountuje se do kontejneru WSL/Linux filesystem.

V Cursoru může prostředí vypadat stejně, protože v obou případech skončíš v kontejneru ve složce /home/ubuntu. Rozdíl je ve zdroji mountu.

Co není potřeba měnit

V tomto scénáři není potřeba měnit Dockerfile.

Také není nutné měnit devcontainer.json, pokud se má dál mountovat celý obsah workspace do /home/ubuntu.

Příklad původního nastavení může zůstat:

{
  "name": "ai",
  "build": {
    "dockerfile": "Dockerfile"
  },
  "runArgs": [
    "--name=ai",
    "--cap-add=SYS_ADMIN",
    "--shm-size=2gb"
  ],
  "workspaceFolder": "/home/ubuntu",
  "mounts": [
    "source=${localWorkspaceFolder},target=/home/ubuntu,type=bind"
  ],
  "remoteUser": "ubuntu",
  "updateRemoteUserUID": true
}

Klíčová změna není v těchto souborech. Klíčová změna je v tom, že Cursor otevře projekt ze WSL filesystemu, ne z C:\.

Postup

Krok 1: Zkontroluj WSL distribuce

Ve Windows otevři PowerShell a spusť:

wsl -l -v

Můžeš vidět například:

  NAME                   STATE           VERSION
* docker-desktop-data    Running         2
  docker-desktop         Running         2

To znamená, že zatím existují jen interní WSL distribuce Docker Desktopu:

docker-desktop
docker-desktop-data

Tyto distribuce nejsou určené pro pracovní data. Nedávej do nich projekt a nepoužívej je jako pracovní Ubuntu.

Krok 2: Nainstaluj běžné Ubuntu do WSL2

Pokud v seznamu není běžná distribuce, například Ubuntu-24.04, nainstaluj ji podle dokumentace Microsoft WSL:

wsl --install -d Ubuntu-24.04

Tento příkaz nevytváří Docker kontejner. Vytváří běžnou WSL2 Ubuntu distribuci, kde bude Linux filesystem:

/home/panhe/...

Po instalaci budeš vyzván k vytvoření Linux uživatele. V reálném příkladu byl uživatel:

panhe

Krok 3: Nastav Ubuntu jako defaultní WSL distribuci

Pokud je defaultní distribuce docker-desktop-data, Cursor se může pokusit připojit právě do ní. To vede k chybám typu:

Resolving wsl remote authority 'wsl+docker-desktop-data'
getpwuid(0) failed
execvpe(bash) failed: No such file or directory

To znamená, že Cursor zkouší použít interní Docker distribuci, ne pracovní Ubuntu.

Nastav správný default:

wsl --set-default Ubuntu-24.04

Ověř:

wsl -l -v

Správně má být hvězdička u Ubuntu-24.04:

  NAME                   STATE           VERSION
* Ubuntu-24.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

Krok 4: Zkopíruj data z Windows do WSL

Původní složka byla:

C:\cursor-ai

Ve WSL je Windows disk C: dostupný jako:

/mnt/c

Takže původní složka je ve WSL vidět jako:

/mnt/c/cursor-ai

Spusť Ubuntu WSL:

wsl -d Ubuntu-24.04

Ve WSL vytvoř cílovou složku a zkopíruj obsah:

mkdir -p ~/cursor-ai
sudo apt update
sudo apt install -y rsync
rsync -a --info=progress2 /mnt/c/cursor-ai/ ~/cursor-ai/

Pozor na lomítko na konci:

/mnt/c/cursor-ai/

To znamená „zkopíruj obsah složky“, ne složku samotnou.

Po kopírování ověř:

cd /home/panhe/cursor-ai
pwd
ls
ls .devcontainer
git status

Správný pwd výstup:

/home/panhe/cursor-ai

Špatný výstup by byl:

/mnt/c/cursor-ai

Krok 5: Zapni Docker Desktop WSL integration

Když se Cursor připojí do WSL a pokusí se otevřít devcontainer, může se objevit chyba:

Failed to reopen folder in container: Error running docker info.
The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

To neznamená, že je potřeba instalovat nový Docker engine do WSL.

Standardní řešení na Windows je použít Docker Desktop a zapnout jeho integraci do WSL distribuce. Postup je v Docker Desktop WSL 2 dokumentaci.

Ve Windows otevři Docker Desktop:

Settings -> Resources -> WSL Integration

Zapni:

Enable integration with my default WSL distro

Případně explicitně zapni:

Ubuntu-24.04

Pak klikni:

Apply & Restart

Ověř ve WSL:

docker version
docker info
docker ps -a

Pokud příkaz docker funguje, WSL Ubuntu umí komunikovat s Docker Desktopem.

Krok 5.1: Zajisti funkčnost po restartu Windows

Po restartu Windows může být WSL distribuce ve stavu:

Stopped

To samo o sobě není chyba. WSL distribuce se umí spustit automaticky ve chvíli, kdy ji něco potřebuje.

Pro praktickou práci ale může být pohodlnější zajistit, aby po přihlášení běžel Docker Desktop i WSL Ubuntu.

Automatický start Docker Desktopu

V Docker Desktopu otevři:

Settings -> General

Zapni:

Start Docker Desktop when you sign in

Potom zkontroluj:

Settings -> Resources -> WSL Integration

Musí být zapnuté:

Enable integration with my default WSL distro

a/nebo explicitně:

Ubuntu-24.04

Volitelné držení WSL Ubuntu přes sleep infinity

Pokud má WSL Ubuntu po startu Windows zůstat běžet pořád, lze použít Windows Task Scheduler.

Tento krok není povinný, ale je praktický, pokud má být prostředí po restartu předvídatelné a hned připravené pro Cursor.

Ve Windows otevři:

Task Scheduler

Vytvoř novou úlohu:

Create Basic Task

Název například:

Start WSL Ubuntu

Trigger:

When I log on

Action:

Start a program

Program:

wsl.exe

Arguments:

-d Ubuntu-24.04 --exec bash -lc "sleep infinity"

Tím se po přihlášení spustí Ubuntu WSL a uvnitř poběží nekonečný proces sleep infinity. Díky tomu distribuce zůstane ve stavu Running.

Co je dobré vědět:

sleep infinity nenahrazuje Docker Desktop autostart ani WSL Integration. Jen drží WSL distribuci živou.

Ověření po restartu

Po restartu Windows ověř v PowerShellu:

wsl -l -v

Očekávané je, že Ubuntu-24.04 může být Running, pokud používáš sleep infinity, nebo Stopped, pokud keepalive nepoužíváš.

Při použití sleep infinity chceš vidět:

Ubuntu-24.04    Running    2

Potom ověř Docker dostupný z WSL:

wsl -d Ubuntu-24.04 -- docker ps

Pokud tento příkaz projde, WSL i Docker Desktop integrace fungují.

Jak WSL ručně zastavit

Pokud budeš chtít WSL Ubuntu ručně zastavit, spusť v PowerShellu:

wsl --terminate Ubuntu-24.04

Nebo zastav celé WSL prostředí:

wsl --shutdown

Pokud je zapnutá Task Scheduler úloha se sleep infinity, WSL se znovu spustí při dalším přihlášení do Windows.

Krok 6: Otevři Cursor správně přes WSL

V Cursoru nepoužívej otevření složky přes Windows cestu:

C:\cursor-ai

Ani jako primární cestu nepoužívej síťovou Windows cestu:

\\wsl.localhost\Ubuntu-24.04\home\panhe\cursor-ai

Tato cesta je užitečná pro Windows Explorer, ale pro vývoj je lepší použít Cursor Remote WSL.

V Cursoru spusť Command Palette:

Ctrl + Shift + P

Použij:

Remote-WSL: New WSL Window

nebo:

WSL: Connect to WSL

Pokud je k dispozici více distribucí, vyber explicitně:

Ubuntu-24.04

V novém WSL okně Cursoru dej:

File -> Open Folder

Zadej Linux cestu:

/home/panhe/cursor-ai

Cursor najde:

/home/panhe/cursor-ai/.devcontainer/devcontainer.json

Krok 7: Rebuild devcontaineru

V Cursoru spusť:

Dev Containers: Rebuild and Reopen in Container

Pokud existuje starý kontejner se stejným jménem, například ai, může nastat konflikt kvůli:

"--name=ai"

V tom případě je možné starý kontejner odstranit, ale pouze pokud je jasné, že důležitá data jsou v bind mountu a ne jen uvnitř kontejneru.

Příklad:

docker stop ai
docker rm ai

Potom znovu spusť rebuild devcontaineru.

Krok 8: Ověř, že nový kontejner používá WSL filesystem

Nejspolehlivější kontrola je přes docker inspect.

Spusť ji ve WSL Ubuntu, ne uvnitř kontejneru:

docker inspect ai --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'

Správný výstup v reálném příkladu byl:

bind /home/panhe/cursor-ai -> /workspaces/cursor-ai
bind /home/panhe/cursor-ai -> /home/ubuntu

To je v pořádku. Znamená to, že zdroj dat je:

/home/panhe/cursor-ai

a ne:

C:\cursor-ai

ani:

/run/desktop/mnt/host/c/cursor-ai

Pokud je vidět /home/panhe/cursor-ai → /home/ubuntu, migrace se povedla.

Proč jsou tam dva mounty

Výstup může obsahovat dva bind mounty:

bind /home/panhe/cursor-ai -> /workspaces/cursor-ai
bind /home/panhe/cursor-ai -> /home/ubuntu

To znamená, že stejný WSL adresář je v kontejneru dostupný na dvou místech.

Jeden mount může vytvořit Dev Containers automaticky:

/workspaces/cursor-ai

Druhý odpovídá vlastnímu nastavení v devcontainer.json:

/home/ubuntu

Pokud se pracuje podle workspaceFolder v /home/ubuntu, je hlavní tento mount:

bind /home/panhe/cursor-ai -> /home/ubuntu

Není to problém, pokud všechno funguje.

Další ověření zevnitř kontejneru

V terminálu Cursoru uvnitř kontejneru spusť:

pwd
mount | grep /home/ubuntu
time git status

pwd může ukázat:

/home/ubuntu

To je správně. Rozdíl není v tom, jak cesta vypadá uvnitř kontejneru. Rozdíl je v tom, odkud je /home/ubuntu namountované.

Přístup k WSL souborům z Windows

Z Windows Exploreru lze otevřít:

\\wsl.localhost\Ubuntu-24.04\home\panhe\cursor-ai

Tuto cestu lze použít pro občasné otevření, kopírování nebo kontrolu souborů z Windows.

Pro běžnou práci s projektem ale používej Cursor přes WSL a devcontainer. Nedoporučuje se dělat náročné operace jako Git, npm install, composer install nebo indexaci přes Windows aplikace nad \\wsl.localhost.

Časté chyby

Cursor se připojuje do docker-desktop-data

Příznak:

Resolving wsl remote authority 'wsl+docker-desktop-data'
getpwuid(0) failed
execvpe(bash) failed: No such file or directory

Význam:

Cursor se snaží použít interní Docker WSL distribuci místo Ubuntu-24.04.

Řešení:

wsl --set-default Ubuntu-24.04

Potom znovu otevři WSL okno v Cursoru.

Ve WSL není příkaz docker

Příznak:

The command 'docker' could not be found in this WSL 2 distro.

Význam:

Docker Desktop není integrovaný do této WSL distribuce.

Řešení:

Docker Desktop -> Settings -> Resources -> WSL Integration

Zapnout integraci pro default WSL distribuci nebo přímo pro Ubuntu-24.04.

V docker inspect je pořád Windows cesta

Příznak:

bind /run/desktop/mnt/host/c/cursor-ai -> /home/ubuntu

nebo:

bind C:\cursor-ai -> /home/ubuntu

Význam:

Projekt je pořád otevřený z Windows filesystemu.

Řešení:

Zavřít okno Cursoru a otevřít projekt z WSL Remote okna jako:

/home/panhe/cursor-ai

ne jako:

C:\cursor-ai

Finální kontrolní checklist

Ve Windows PowerShellu:

wsl -l -v

Očekávané:

* Ubuntu-24.04    ...    2

Pokud se používá Task Scheduler se sleep infinity, po restartu Windows očekávej:

Ubuntu-24.04    Running    2

Ve Windows PowerShellu ověř Docker dostupný z WSL:

wsl -d Ubuntu-24.04 -- docker ps

Očekávané:

docker příkaz projde bez chyby

Ve WSL:

pwd

Očekávané ve složce projektu:

/home/panhe/cursor-ai

Ve WSL:

docker ps -a

Očekávané:

docker příkaz funguje a jsou vidět kontejnery Docker Desktopu

Ve WSL:

docker inspect ai --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'

Očekávané:

bind /home/panhe/cursor-ai -> /home/ubuntu

V kontejneru:

cd /home/ubuntu
time git status

Očekávané:

git status je výrazně rychlejší než při práci nad C:\cursor-ai

Shrnutí

Funkční řešení není „připojit Cursor do kontejneru“ samo o sobě. Funkční řešení je otevřít projekt z WSL filesystemu a až potom spustit devcontainer.

Správný řetězec je:

Windows
-> Cursor Remote WSL: Ubuntu-24.04
-> otevřená složka /home/panhe/cursor-ai
-> Dev Containers rebuild
-> kontejner ai
-> /home/ubuntu bind mount z /home/panhe/cursor-ai

Data zůstávají dostupná z Windows přes:

\\wsl.localhost\Ubuntu-24.04\home\panhe\cursor-ai

a zároveň kontejner pracuje s rychlým Linux filesystemem místo pomalého Windows bind mountu.

Zdroje