# Test Compose File for Database Detection Logic # This file contains various services to test the isDatabaseImage() function # and its contextual analysis capabilities # Service names indicate expected detection: "database-*" or "application-*" version: '3.8' services: # ============================================================================= # ACTUAL DATABASES (should be detected as databases) # ============================================================================= # Standard PostgreSQL database database-postgres-main: image: postgres:16 environment: - POSTGRES_USER=admin - POSTGRES_PASSWORD=secret123 - POSTGRES_DB=maindb ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "admin", "-d", "maindb"] interval: 5s timeout: 5s retries: 5 # MySQL database database-mysql-main: image: mysql:8.0 environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=testdb - MYSQL_USER=dbuser - MYSQL_PASSWORD=dbpass ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3 # MongoDB database database-mongodb-main: image: mongo:7 environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password - MONGO_INITDB_DATABASE=testmongo ports: - "27017:27017" volumes: - mongo-data:/data/db healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 3 # Redis database database-redis-main: image: redis:7-alpine environment: - REDIS_PASSWORD=redispass ports: - "6379:6379" volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 3 # Database with non-standard port database-postgres-custom-port: image: postgres:15 environment: - POSTGRES_USER=customuser - POSTGRES_PASSWORD=custompass - POSTGRES_DB=customdb ports: - "5433:5432" # Non-standard external port volumes: - postgres-custom-data:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "customuser", "-d", "customdb"] interval: 5s timeout: 5s retries: 5 # MySQL variant with different image database-mariadb: image: mariadb:11 environment: - MARIADB_ROOT_PASSWORD=mariaroot - MARIADB_DATABASE=mariadb - MARIADB_USER=mariauser - MARIADB_PASSWORD=mariapass ports: - "3307:3306" volumes: - mariadb-data:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 3 # ============================================================================= # APPLICATIONS WITH DATABASE NAMES (should NOT be detected as databases) # ============================================================================= # SuperTokens - authentication app with postgresql in name application-supertokens: image: registry.supertokens.io/supertokens/supertokens-postgresql:latest depends_on: database-postgres-main: condition: service_healthy environment: - SERVICE_FQDN_SUPERTOKENS_3567 - API_KEYS=test-api-key - POSTGRESQL_CONNECTION_URI=postgresql://admin:secret123@database-postgres-main:5432/maindb ports: - "3567:3567" healthcheck: test: "bash -c 'exec 3<>/dev/tcp/127.0.0.1/3567 && echo -e \"GET /hello HTTP/1.1\\r\\nhost: 127.0.0.1:3567\\r\\nConnection: close\\r\\n\\r\\n\" >&3 && cat <&3 | grep \"Hello\"'" interval: 10s timeout: 5s retries: 5 # Metabase - analytics app that uses databases application-metabase: image: metabase/metabase:latest depends_on: database-postgres-main: condition: service_healthy environment: - SERVICE_FQDN_METABASE_3000 - MB_DB_TYPE=postgres - MB_DB_HOST=database-postgres-main - MB_DB_PORT=5432 - MB_DB_DBNAME=maindb - MB_DB_USER=admin - MB_DB_PASS=secret123 ports: - "3000:3000" healthcheck: test: ["CMD", "curl", "--fail", "-I", "http://127.0.0.1:3000/api/health"] interval: 30s timeout: 10s retries: 3 # NocoDB - no-code database interface application-nocodb: image: nocodb/nocodb:latest depends_on: database-postgres-main: condition: service_healthy environment: - SERVICE_FQDN_NOCODB_8080 - DATABASE_URL=postgresql://admin:secret123@database-postgres-main:5432/maindb - NC_AUTH_JWT_SECRET=your-secret-key ports: - "8080:8080" volumes: - nocodb-data:/usr/app/data healthcheck: test: ["CMD", "curl", "--fail", "http://127.0.0.1:8080/api/v1/health"] interval: 20s timeout: 10s retries: 3 # PostgREST - REST API for PostgreSQL application-postgrest: image: postgrest/postgrest:latest depends_on: database-postgres-main: condition: service_healthy environment: - SERVICE_FQDN_POSTGREST_3001 - PGRST_DB_URI=postgresql://admin:secret123@database-postgres-main:5432/maindb - PGRST_DB_SCHEMA=public - PGRST_DB_ANON_ROLE=web_anon ports: - "3001:3000" healthcheck: test: ["CMD", "curl", "--fail", "http://127.0.0.1:3000/"] interval: 10s timeout: 5s retries: 3 # Umami - web analytics with postgresql variant application-umami-postgresql: image: ghcr.io/umami-software/umami:postgresql-latest depends_on: database-postgres-main: condition: service_healthy environment: - SERVICE_FQDN_UMAMI_3002 - DATABASE_URL=postgres://admin:secret123@database-postgres-main:5432/maindb - DATABASE_TYPE=postgres - APP_SECRET=umami-secret ports: - "3002:3000" healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/api/heartbeat"] interval: 5s timeout: 20s retries: 10 # Twenty CRM custom postgres (should be detected as database) database-twenty-postgres: image: twentycrm/twenty-postgres:latest environment: - POSTGRES_USER=twentyuser - POSTGRES_PASSWORD=twentypass - POSTGRES_DB=twenty ports: - "5434:5432" volumes: - twenty-postgres-data:/bitnami/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 # Infisical - secret management with postgres variant application-infisical-postgres: image: infisical/infisical:latest-postgres depends_on: database-postgres-main: condition: service_healthy environment: - SERVICE_FQDN_INFISICAL_8080 - SITE_URL=http://localhost:8080 - NODE_ENV=production - ENCRYPTION_KEY=infisical-encryption-key - AUTH_SECRET=infisical-auth-secret - DB_CONNECTION_URI=postgres://admin:secret123@database-postgres-main:5432/maindb - REDIS_URL=redis://database-redis-main:6379 ports: - "8081:8080" healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://127.0.0.1:8080/api/status || exit 1"] interval: 15s timeout: 10s retries: 3 # ============================================================================= # EDGE CASES AND TRICKY SCENARIOS # ============================================================================= # App with database-like name but no context application-fake-postgres-client: image: mycompany/postgres-client:latest environment: - SERVICE_FQDN_POSTGRES_CLIENT_4000 - APP_NAME=PostgreSQL Client - API_ENDPOINT=http://api.example.com ports: - "4000:4000" healthcheck: test: ["CMD", "curl", "--fail", "http://127.0.0.1:4000/health"] interval: 15s timeout: 5s retries: 3 # App that connects to external database application-webapp-external-db: image: node:18-alpine environment: - SERVICE_FQDN_WEBAPP_8000 - DATABASE_URL=postgresql://user:pass@external-db.example.com:5432/appdb - NODE_ENV=production - JWT_SECRET=webapp-secret ports: - "8000:8000" command: ["node", "server.js"] healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8000/health"] interval: 30s timeout: 10s retries: 3 # Redis-based app (not a database itself) application-redis-commander: image: redis-commander:latest depends_on: database-redis-main: condition: service_healthy environment: - SERVICE_FQDN_REDIS_COMMANDER_8081 - REDIS_HOSTS=local:database-redis-main:6379 - HTTP_USER=admin - HTTP_PASSWORD=admin ports: - "8082:8081" healthcheck: test: ["CMD", "curl", "--fail", "http://127.0.0.1:8081/"] interval: 15s timeout: 5s retries: 3 # MongoDB management interface application-mongo-express: image: mongo-express:latest depends_on: database-mongodb-main: condition: service_healthy environment: - SERVICE_FQDN_MONGO_EXPRESS_8082 - ME_CONFIG_MONGODB_SERVER=database-mongodb-main - ME_CONFIG_MONGODB_PORT=27017 - ME_CONFIG_MONGODB_ADMINUSERNAME=admin - ME_CONFIG_MONGODB_ADMINPASSWORD=password - ME_CONFIG_BASICAUTH_USERNAME=mongouser - ME_CONFIG_BASICAUTH_PASSWORD=mongopass ports: - "8083:8081" healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1:8081/"] interval: 20s timeout: 10s retries: 3 # ============================================================================= # REGULAR APPLICATIONS (clearly not databases) # ============================================================================= # Nginx web server application-nginx: image: nginx:alpine environment: - SERVICE_FQDN_NGINX_80 - NGINX_HOST=localhost - NGINX_PORT=80 ports: - "8084:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro healthcheck: test: ["CMD", "curl", "--fail", "http://127.0.0.1:80/"] interval: 10s timeout: 5s retries: 3 # Node.js application application-node-app: image: node:18-alpine environment: - SERVICE_FQDN_NODEAPP_3002 - NODE_ENV=production - PORT=3000 ports: - "3003:3000" command: ["node", "index.js"] healthcheck: test: ["CMD", "curl", "--fail", "http://127.0.0.1:3000/api/health"] interval: 15s timeout: 5s retries: 3 volumes: postgres-data: postgres-custom-data: mysql-data: mariadb-data: mongo-data: redis-data: nocodb-data: twenty-postgres-data: