The test environment lives in dev-environment/docker/. Default Compose mounts ../data/sites/localhost/public_html as the app container DocumentRoot, starts MySQL 8 and phpMyAdmin, and offers Redis/Memcached under the optional profile. YAML default local ports are HTTP 80, MySQL 3306 and phpMyAdmin 8081. Check port conflicts before starting.
cd dev-environment/docker
docker compose up -d
docker compose psdocker-compose.php85-mysql.yml uses Dockerfile.php85 (php:8.5-apache); a PostgreSQL variant also exists. These are alternative stacks publishing the same HTTP port, so run one at a time. The 8.5 Dockerfile installs pdo_mysql, pdo_pgsql, mysqli, mbstring, gd, zip and xml. Old comments in those variants mention banco-v2.php; that library was removed from Core.
Optional tunnel
The cloudflared service uses the tunnel profile and reads ../data/cloudflared as read only configuration. Keep credentials outside the repository and start with docker compose --profile tunnel up -d; inspect docker compose logs -f cloudflared. The image is distroless and has no shell. Do not expose an environment with production credentials.
Synchronize Core
Compose mounts the test mirror, but editing Core authoring files does not update the database. Run php cli/c2f.php manager:update-all at the Core root to compile resources, sync files and update the database. Run pipelines sequentially. See resources and manager CLI.