Codex CLI v Dockeru: Windows 11 + WSL2 i čisté Ubuntu
Tento návod sjednocuje dvě funkční varianty:
- Windows 11 + WSL2 (Ubuntu) + Docker Desktop
- čisté Ubuntu + Docker Engine
Cíl je stejný: spouštět Codex CLI v izolovaném kontejneru jen nad aktuálním projektem, s trvalým loginem a bez zbytečných problémů.
Doporučení: projekty drž lokálně v Linuxovém filesystemu. Ve WSL tedy v
~/projects, na Ubuntu stejně. Nepracuj přímo z/mnt/cani z NAS mountu.
Co budeš mít na konci
- funkční Docker bez
sudo - image
codexbox:node20-ca - Codex spuštěný jen nad aktuálním projektem
- trvalé přihlášení přes mount
~/.codex - jednoduchou funkci
codexsafeproxy - otestované TLS spojení z kontejneru
Kdy použít kterou variantu
Varianta A: Windows 11 + WSL2
Použij ji, když pracuješ na Windows a chceš vyvíjet ve WSL.
Varianta B: čisté Ubuntu
Použij ji, když máš samostatný Linux stroj nebo VM a WSL vůbec nepotřebuješ.
1. Připrav projekty
V Linuxu si udělej pracovní adresář:
mkdir -p ~/projects/mojeapp
cd ~/projects/mojeapp
/workspace v kontejneru není skutečná složka na hostu. Je to jen pracovní adresář uvnitř image. Tvoje data jsou ta složka, kterou mountneš přes -v.
2. Docker
Varianta A: Windows 11 + WSL2
- Nainstaluj WSL2 a Ubuntu.
- Nainstaluj Docker Desktop.
- V Docker Desktop zapni:
Use the WSL 2 based engineWSL Integrationpro tvoje Ubuntu
Ve WSL ověř:
docker --version
docker ps
Pokud ve WSL chybí Docker CLI, doinstaluj balíček docker.io:
sudo apt update
sudo apt install -y docker.io
Na WSL s Docker Desktop nespouštěj vlastní Docker daemon přes systemctl.
Varianta B: čisté Ubuntu
Nainstaluj Docker Engine a ověř běh:
sudo apt update
sudo apt install -y docker.io ca-certificates curl
sudo systemctl enable docker
sudo systemctl start docker
docker --version
sudo docker ps
Přidej se do skupiny docker:
sudo usermod -aG docker $USER
newgrp docker
docker ps
Pokud se změna nechytí, odhlas se a přihlas znovu.
3. Oprava permission denied na docker.sock
Když uvidíš chybu:
permission denied while trying to connect to the Docker daemon socket
ověř:
ls -l /var/run/docker.sock
groups
docker ps
Na WSL někdy pomůže i úplné vypnutí instance. Tento příkaz spusť ve Windows PowerShellu nebo CMD, ne uvnitř Ubuntu:
wsl --shutdown
Pak znovu otevři Ubuntu.
4. Připrav build adresář pro Codex image
mkdir -p ~/codex-docker
cd ~/codex-docker
Pokud jsi ve firemní síti a potřebuješ vlastní CA certifikát, zkopíruj ho sem:
cp /usr/local/share/ca-certificates/corp-ca.crt ~/codex-docker/
Pokud firemní CRT nepotřebuješ, vynech v Dockerfile řádky COPY corp-ca.crt ... a RUN update-ca-certificates.
5. Dockerfile
Použij tento Dockerfile:
FROM node:20
USER root
RUN apt-get update && apt-get install -y ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*
COPY corp-ca.crt /usr/local/share/ca-certificates/corp-ca.crt
RUN update-ca-certificates
RUN npm install -g npm@11.11.0
RUN npm install -g @openai/codex@latest
USER node
WORKDIR /workspace
Pokud firemní CA nepotřebuješ, může Dockerfile vypadat i takto:
FROM node:20
USER root
RUN apt-get update && apt-get install -y ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g npm@11.11.0
RUN npm install -g @openai/codex@latest
USER node
WORKDIR /workspace
Poznámky
npm@latestklidně použít můžeš, ale fixní verze je stabilnější pro návod.WORKDIR /workspacejen nastaví výchozí adresář v kontejneru.- Codex se instaluje v image, ne na hosta. Samostatná instalace
npm install -g @openai/codexmimo Docker tady není nutná. - Pokud certifikát nepoužíváš, Dockerfile bez těch dvou řádků kolem
corp-ca.crtje správně.
6. Build image
docker build --pull --no-cache -t codexbox:node20-ca ~/codex-docker
Ověření verze Codexu v image:
docker run --rm codexbox:node20-ca codex --version
Poznámka: hláška o legacy builderu není sama o sobě chyba.
7. Otestuj komunikaci z kontejneru
Stačí jeden jednoduchý test:
docker run --rm -it codexbox:node20-ca sh -lc 'curl -I https://chatgpt.com'
Tím ověříš síťovou komunikaci i TLS. Není důležité, jestli vrácený HTTP status bude 200, 301, 302, 401 nebo 403; pro tento test je podstatné, že spojení a certifikáty projdou bez TLS chyby.
Pokud test selže, bývá problém v chybějícím firemním CA certifikátu v image.
8. Trvalé přihlášení
Vytvoř persistentní adresář pro přihlášení:
mkdir -p ~/.codex
Díky mountu se login zachová mezi kontejnery i po restartu WSL nebo Ubuntu.
9. Funkce codexsafeproxy
Do ~/.bashrc přidej:
codexsafeproxy() {
local PROJ="$PWD"
local PROJ_ID
PROJ_ID="$(printf '%s' "$PROJ" | sha1sum | awk '{print $1}')"
docker run --rm -it -u node \
-e HOME=/home/node \
-v "$HOME/.codex":/home/node/.codex \
-v "$PROJ":"/workspaces/$PROJ_ID" \
-w "/workspaces/$PROJ_ID" \
--cap-drop=ALL --security-opt no-new-privileges \
codexbox:node20-ca sh -lc '
codex resume --last || exec codex
'
}
Načti změny:
source ~/.bashrc
Použití:
cd ~/projects/mojeapp
codexsafeproxy
Tato varianta je praktičtější než starý alias codexsafe, protože odděluje pracovní adresáře podle hashovaného PROJ_ID.
Funkce se nejdřív pokusí obnovit poslední relaci přes codex resume --last. Pokud žádná není, spustí novou přes codex.
10. Login
Při prvním spuštění se přihlas. Když bude zlobit callback na localhost, použij device auth:
codex login --device-auth
To je nejspolehlivější hlavně ve WSL a Dockeru.
11. Co není nutné
- Není nutné zavádět speciální funkci typu
codexnew, pokud už mášcodexsafeproxy. - Není nutné instalovat Codex i na hosta, pokud ho spouštíš jen z Docker image.
- Není nutné řešit
/workspacejako reálnou složku v home. Je to jen pracovní cesta uvnitř kontejneru.
12. Nejčastější problémy
docker: command not found
Na WSL chybí CLI nebo není zapnutá WSL integrace v Docker Desktop.
permission denied ... docker.sock
Uživatel není ve skupině docker, nebo je nutný nový login či wsl --shutdown.
Login nefunguje přes localhost callback
Použij:
codex login --device-auth
Po restartu chce Codex znovu login
Zkontroluj, že je v docker run opravdu přítomný tento mount:
-v "$HOME/.codex":/home/node/.codex
TLS chyba z kontejneru
Obvykle chybí firemní CA v image.
NPM hlásí novou major verzi
Pro návod je lepší fixní verze. npm@latest může později změnit chování.