Documentation

Codex CLI v Dockeru: Windows 11 + WSL2 i čisté Ubuntu

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/c ani 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

  1. Nainstaluj WSL2 a Ubuntu.
  2. Nainstaluj Docker Desktop.
  3. V Docker Desktop zapni:
    • Use the WSL 2 based engine
    • WSL Integration pro 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@latest klidně použít můžeš, ale fixní verze je stabilnější pro návod.
  • WORKDIR /workspace jen nastaví výchozí adresář v kontejneru.
  • Codex se instaluje v image, ne na hosta. Samostatná instalace npm install -g @openai/codex mimo Docker tady není nutná.
  • Pokud certifikát nepoužíváš, Dockerfile bez těch dvou řádků kolem corp-ca.crt je 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 /workspace jako 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í.

Shrnutí

© www.duckd.cz
Grav + Twigatedo-quark2026-04-25