Documentation

Windows 11 + WSL2 (Ubuntu 24.04) + Docker sandbox + Codex CLI nad projektem

Tento návod je kompletní od nuly: nainstaluje WSL2 + Ubuntu na Windows 11, nastaví Docker a spustí Codex CLI bezpečně v Docker sandboxu tak, aby viděl jen aktuální projektový adresář. Zároveň řeší reálné problémy z praxe: docker.sock permission denied, potíže s OAuth callbackem na localhost a „zapomenuté přihlášení“ po restartu WSL.

Doporučení: projekty drž ve WSL (~/projects/...). Synology NAS používej hlavně na zálohy / git remote / snapshoty.


0) Co budeš mít na konci

  • Ubuntu 24.04 LTS ve WSL2 na Windows 11
  • Projekty ve WSL: ~/projects/<projekt>
  • Docker funkční ve WSL (docker ps bez sudo)
  • Codex CLI běží v izolovaném kontejneru nad projektem: codexsafe
  • Přihlášení jen jednou (přežije nové kontejnery i restart WSL)
  • Codex nevidí tvůj /home/<uživatel>, /mnt/c, NAS… jen mountnutý projekt

1) Zapni virtualizaci (BIOS/UEFI)

V BIOS/UEFI zapni:

  • Intel: VT-x
  • AMD: SVM / AMD-V

Bez toho WSL2 často hlásí chyby typu „virtualizace není povolena“.


2) Nainstaluj WSL2 + Ubuntu na Windows 11

Otevři PowerShell jako administrátor a spusť:

wsl --install

Tím se:

  • nainstaluje WSL
  • nastaví WSL2 jako výchozí
  • stáhne a nainstaluje Ubuntu (typicky poslední LTS)

Pokud už WSL máš, ale chceš jistotu WSL2:

wsl --update
wsl --set-default-version 2

Zjisti výchozí prostředí pro WSL

wsl -l -v

Nastav výchozí prostředí pro WSL

# Trvalé nastavení
wsl --set-default Ubuntu

# Dočasné nastavení
wsl -d Ubuntu

Restartuj Windows, pokud si o to systém řekne.


3) První spuštění Ubuntu

Spusť Ubuntu (z nabídky Start). Při prvním startu:

  • vytvoř si Linux uživatele (např. duckd)
  • nastav heslo (kvůli sudo)

Ověř, že běžíš na WSL2:

uname -a

Mělo by tam být microsoft-standard-WSL2.

Ověř Ubuntu verzi:

lsb_release -a

Ideálně Ubuntu 24.04 LTS (noble).


4) Doporučená struktura projektů (ve WSL)

Vytvoř složku na projekty:

mkdir -p ~/projects

Příklad projektu:

mkdir -p ~/projects/mojeapp
cd ~/projects/mojeapp

Nedoporučení: pracovat v /mnt/c/WINDOWS/system32 apod. (výkon, práva, bezpečnost).


5) Nainstaluj Docker (doporučená cesta)

Varianta A (doporučeno): Docker Desktop ve Windows + WSL integrace

1) Nainstaluj Docker Desktop ve Windows 11. 2) Docker Desktop → Settings → General: zapni Use the WSL 2 based engine. 3) Docker Desktop → Settings → Resources → WSL Integration: zapni integraci pro své Ubuntu.

Pak ve WSL ověř:

docker --version
docker ps

Pokud ve WSL příkaz docker neexistuje, doinstaluj CLI:

sudo apt update
sudo apt install -y docker.io

Pozn.: Docker engine poběží v Docker Desktopu, WSL bude používat docker CLI.


6) Oprava: permission denied … /var/run/docker.sock

Typická chyba:

permission denied while trying to connect to the Docker daemon socket … /var/run/docker.sock

Ověř práva socketu:

ls -l /var/run/docker.sock

Správně bývá root docker a skupina má rw.

Přidej uživatele do skupiny docker:

sudo usermod -aG docker $USER
newgrp docker

Ověř:

groups
docker ps

Pokud to nepomůže, ve Windows PowerShell:

wsl --shutdown

Znovu otevři Ubuntu a ověř docker ps.


7) Nainstaluj Node.js ve WSL (pro build image)

Doporučeno Node 20:

sudo apt install -y nodejs npm
node -v
npm -v

8) Instaluj codex

 sudo npm install -g @openai/codex

8) Vytvoř Docker image s Codex CLI (jednou)

Vytvoř si adresář pro build:

mkdir -p ~/codexbox
cd ~/codexbox
nano Dockerfile

Obsah Dockerfile:

FROM node:20-bullseye
RUN npm i -g @openai/codex
WORKDIR /workspace

Build:

docker build -t codexbox:node20 .

Pozn.: hláška o „legacy builder deprecated“ není chyba.


9) Trvalé přihlášení v sandboxu (persistence po restartu WSL)

Aby ses nemusel přihlašovat po každém restartu WSL / novém projektu, uložíme tokeny do persistentního “home” uživatele node:

mkdir -p ~/.codex-node-home

10) Spuštění Codexu bezpečně nad projektem (ručně)

V projektu:

cd ~/projects/mojeapp
docker run --rm -it   -u node -e HOME=/home/node   -v "$(pwd)":/workspace   -v "$HOME/.codex-node-home":/home/node   -w /workspace   --cap-drop=ALL   --security-opt no-new-privileges   codexbox:node20   bash

Uvnitř kontejneru (jen poprvé):

codex login --device-auth

Potom už stačí:

codex

Doporučení: Device Auth je nejspolehlivější ve WSL/Docker a vyhne se problémům s OAuth callbackem na localhost.


11) Alias codexsafe (doporučeno)

Ubuntu obvykle načítá ~/.bash_aliases z ~/.bashrc, takže aliasy je čisté dávat sem.

Otevři:

nano ~/.bash_aliases

Přidej jednořádkově:

alias codexsafe='docker run --rm -it -u node -e HOME=/home/node -v "$(pwd)":/workspace -v "$HOME/.codex-node-home":/home/node -w /workspace --cap-drop=ALL --security-opt no-new-privileges codexbox:node20 bash'

Načti:

source ~/.bashrc

Použití:

cd ~/projects/mojeapp
codexsafe
codex

12) Přepínání mezi projekty

Ukonči kontejner:

exit

nebo Ctrl+D.

Přejdi na další projekt:

cd ~/projects/jinyprojekt
codexsafe
codex

Kontejner se díky --rm po ukončení smaže, ale soubory v projektu zůstanou.


13) Kde projekt uvidíš z Windows

V Průzkumníku Windows otevři:

  • \\wsl$
  • nebo přímo: \\wsl$\Ubuntu\home\<tvůj_uživatel>\projects

Rychlá metoda z WSL (otevře Explorer v aktuální složce):

explorer.exe .

14) Bezpečnost: proč jde ls .. a vidím /?

Když jsi v kontejneru v /workspace, .. je / kontejneru, ne hosta.

Kontejnerový / je součást Docker image (node:20-bullseye) – není to tvůj WSL root ani Windows disk. Host je dostupný jen přes explicitní mounty -v.


15) Troubleshooting (nejčastější chyby)

A) docker: command not found

  • Zkontroluj Docker Desktop + WSL integraci (kapitola 5)
  • nebo doinstaluj CLI:
sudo apt install -y docker.io

B) permission denied … docker.sock

Viz kapitola 6.

C) OAuth / localhost login nefunguje (ERR_EMPTY_RESPONSE)

Použij device auth:

codex login --device-auth

D) Codex po restartu WSL chce znovu login

Zkontroluj, že máš:

  • ~/.codex-node-home
  • alias mountuje -v "$HOME/.codex-node-home":/home/node
  • běžíš jako node: -u node -e HOME=/home/node

E) WARNING: could not update PATH / Permission denied (os error 13)

To se stává, když mountuješ persistentní /root a práva nesedí. Řešení je právě běh jako node s persistentním /home/node (tento návod to používá).


16) NAS (Synology) doporučení

  • Vývoj: lokálně ve WSL (~/projects)
  • NAS: záloha / git remote / rsync / snapshoty

Práce přímo z NAS mountu je často pomalejší a může komplikovat práva pro Docker. Nejstabilnější je mít pracovní kopii ve WSL a NAS používat na ukládání/zálohy.


Hotovo

Tímto máš:

  • kompletní instalaci WSL2 + Ubuntu,
  • Docker ve WSL,
  • bezpečný sandbox pro Codex,
  • trvalé přihlášení,
  • jednoduché přepínání projektů,
  • a přístup k projektům z Windows.
© www.duckd.cz
Grav + Twigatedo-quark2026-03-17