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:
- WSL Ubuntu po startu Windows běží a Cursor se do něj může rychleji připojit.
- WSL bude trvale zabírat část RAM.
- Task Scheduler úloha bude pořád ve stavu
Running. - WSL poběží, ale Docker Desktop stejně musí být také nastartovaný.
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.