Skip to content

Docker Executor

Docker executor umożliwia uruchamianie zadań w izolowanych kontenerach Docker, zapewniając powtarzalne i bezpieczne środowisko wykonania dla różnych typów projektów.

Przegląd

Docker executor automatycznie:

  • Tworzy i konfiguruje kontenery Docker dla zadań
  • Montuje wymagane credentials i konfiguracje
  • Instaluje dependencies (PHP, Composer, Node.js, Claude CLI)
  • Klonuje repozytoria projektów
  • Wykonuje zadania w izolowanych środowiskach
  • Automatycznie czyści kontenery po zakończeniu

Obsługiwane projekty

Angular

  • Image: node:18-alpine
  • Repository: Klonowane przez git clone w kontenerze
  • Dependencies: npm install
  • Git operations: Wykonywane wewnątrz kontenera

Laravel

  • Image: php:8.2-fpm-alpine
  • Repository: Klonowane przez git clone w kontenerze
  • Dependencies: PHP extensions, Composer, npm
  • Database: MySQL container z dedykowanymi volumes
  • Git operations: Wykonywane wewnątrz kontenera

Workflow wykonania

1. Przygotowanie kontenera

  1. Template setup - Kopiowanie docker-compose templates i scripts
  2. Resource creation - Tworzenie konfiguracji .claude/.gemini/.codex
  3. Docker compose up - Uruchomienie kontenerów

2. Instalacja dependencies

Wykonywane przez start.sh w następującej kolejności:

bash
# Podstawowe pakiety systemowe
# Klonowanie repozytorium
# Setup specyficzny dla projektu
# Instalacja Claude CLI
# Instalacja Gemini CLI  
# Setup symlinks

3. Monitoring i wykonanie

  1. STATUS:::READY - Kontener sygnalizuje gotowość
  2. Claude execution - Delegacja do Claude executor z execFunc
  3. Docker exec - Komendy wykonywane przez docker exec
  4. Monitoring - Śledzenie statusu kontenera

Debugging

Logi kontenerów

bash
# Status kontenera
docker ps -a --filter name=${TASK_ID}-session-${SESSION_NUMBER}

# Logi kontenera
docker logs ${TASK_ID}-session-${SESSION_NUMBER}

# Exec do kontenera
docker exec -it ${TASK_ID}-session-${SESSION_NUMBER} bash

Pliki diagnostyczne

  • container.log - /app/project/.spec/${TASK_ID}_${SESSION_NUMBER}/container.log
  • output.json - /app/worker/.spec/${TASK_ID}_${SESSION_NUMBER}/output.json

Bezpieczeństwo

Izolacja

  • Każde zadanie ma własny kontener z unikalną nazwą
  • Dedicated volumes dla MySQL databases
  • Read-only mounting dla credentials
  • Automatyczny cleanup po zakończeniu

Rozwiązywanie problemów

Claude CLI nie działa

  1. Sprawdź czy npm jest zainstalowany: docker exec container npm --version
  2. Sprawdź PATH: docker exec container echo $PATH
  3. Sprawdź instalację Claude: docker exec container claude --version

Git push fails

  1. Sprawdź credentials: docker exec container ls -la ~/.ssh/
  2. Sprawdź git config: docker exec container git config --list
  3. Sprawdź remote: docker exec container git remote -v

Kontener nie startuje

  1. Sprawdź docker logs: docker logs ${TASK_ID}-session-${SESSION_NUMBER}
  2. Sprawdź compose file w /tmp/docker-compose-${TASK_ID}-session-${SESSION_NUMBER}.yml
  3. Sprawdź resource mounting i permissions