{"owner":"apache","repo":"superset","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"docker-compose.yml","servicesCount":10,"services":[{"name":"nginx","image":"nginx:latest","restart":"unless-stopped","command":"/bin/bash -c url=\"http://host.docker.internal:9000/static/assets/manifest.json\"\nmax_attempts=300  # ~10 minutes at 2s intervals; first build can be slow\necho \"Waiting for webpack dev server at $$url...\"\nattempt=0\nuntil curl -sf --max-time 5 -H \"Host: localhost\" -o /dev/null \"$$url\"; do\n  attempt=$$((attempt + 1))\n  if [ \"$$attempt\" -ge \"$$max_attempts\" ]; then\n    echo \"ERROR: webpack dev server did not serve $$url after $$max_attempts attempts.\" >&2\n    echo \"Is the dev server running? With BUILD_SUPERSET_FRONTEND_IN_DOCKER=false you must start it on the host (e.g. 'npm run dev' in superset-frontend).\" >&2\n    exit 1\n  fi\n  if [ $$((attempt % 15)) -eq 0 ]; then\n    echo \"Still waiting for webpack dev server... ($$attempt/$$max_attempts)\"\n  fi\n  sleep 2\ndone\necho \"Webpack dev server is ready; starting nginx.\"\nexec /docker-entrypoint.sh nginx -g 'daemon off;'\n","ports":["${NGINX_PORT:-80}:80"],"volumes":["./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro","./docker/nginx/templates:/etc/nginx/templates:ro"]},{"name":"redis","image":"redis:7","restart":"unless-stopped","ports":["127.0.0.1:${REDIS_PORT:-6379}:6379"],"volumes":["redis:/data"]},{"name":"db","image":"postgres:17","restart":"unless-stopped","ports":["127.0.0.1:${DATABASE_PORT:-5432}:5432"],"volumes":["db_home:/var/lib/postgresql/data","./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d"]},{"name":"superset","build":{"context":"."},"restart":"unless-stopped","command":"/app/docker/docker-bootstrap.sh app","ports":["${SUPERSET_PORT:-8088}:8088"],"volumes":["./docker:/app/docker","./superset:/app/superset","./superset-core:/app/superset-core","./superset-frontend:/app/superset-frontend","superset_home:/app/superset_home","./tests:/app/tests","superset_data:/app/data","./local_extensions:/app/local_extensions"],"depends_on":["superset-init"]},{"name":"superset-websocket","build":"./superset-websocket","ports":["${WEBSOCKET_PORT:-8080}:8080"],"environment":["PORT=8080","REDIS_HOST=redis","REDIS_PORT=6379","REDIS_SSL=false"],"volumes":["./superset-websocket:/home/superset-websocket","/home/superset-websocket/node_modules","/home/superset-websocket/dist","./docker/superset-websocket/config.example.json:/home/superset-websocket/config.json:ro"],"depends_on":["redis"]},{"name":"superset-init","build":{"context":"."},"command":"/app/docker/docker-init.sh","environment":["SUPERSET_FORCE_LOAD_EXAMPLES=${SUPERSET_FORCE_LOAD_EXAMPLES:-}"],"volumes":["./docker:/app/docker","./superset:/app/superset","./superset-core:/app/superset-core","./superset-frontend:/app/superset-frontend","superset_home:/app/superset_home","./tests:/app/tests","superset_data:/app/data","./local_extensions:/app/local_extensions"],"depends_on":["db","redis"]},{"name":"superset-node","build":{"context":"."},"command":"/app/docker/docker-frontend.sh","ports":["127.0.0.1:${NODE_PORT:-9000}:9000"],"environment":["BUILD_SUPERSET_FRONTEND_IN_DOCKER=true","NPM_RUN_PRUNE=false","SCARF_ANALYTICS=${SCARF_ANALYTICS:-}","DISABLE_TS_CHECKER=${DISABLE_TS_CHECKER:-true}","superset=http://superset:8088","WEBPACK_DEVSERVER_HOST=0.0.0.0"],"volumes":["./docker:/app/docker","./superset:/app/superset","./superset-core:/app/superset-core","./superset-frontend:/app/superset-frontend","/app/superset-frontend/node_modules","superset_home:/app/superset_home","./tests:/app/tests","superset_data:/app/data","./local_extensions:/app/local_extensions"]},{"name":"superset-worker","build":{"context":"."},"restart":"unless-stopped","command":"/app/docker/docker-bootstrap.sh worker","environment":["CELERYD_CONCURRENCY=2"],"volumes":["./docker:/app/docker","./superset:/app/superset","./superset-core:/app/superset-core","./superset-frontend:/app/superset-frontend","superset_home:/app/superset_home","./tests:/app/tests","superset_data:/app/data","./local_extensions:/app/local_extensions"],"depends_on":["superset-init"]},{"name":"superset-worker-beat","build":{"context":"."},"restart":"unless-stopped","command":"/app/docker/docker-bootstrap.sh beat","volumes":["./docker:/app/docker","./superset:/app/superset","./superset-core:/app/superset-core","./superset-frontend:/app/superset-frontend","superset_home:/app/superset_home","./tests:/app/tests","superset_data:/app/data","./local_extensions:/app/local_extensions"],"depends_on":["superset-worker"]},{"name":"superset-tests-worker","build":{"context":"."},"command":"/app/docker/docker-bootstrap.sh worker","environment":["DATABASE_HOST=localhost","DATABASE_DB=test","REDIS_CELERY_DB=2","REDIS_RESULTS_DB=3","REDIS_HOST=localhost","CELERYD_CONCURRENCY=8"],"volumes":["./docker:/app/docker","./superset:/app/superset","./superset-core:/app/superset-core","./superset-frontend:/app/superset-frontend","superset_home:/app/superset_home","./tests:/app/tests","superset_data:/app/data","./local_extensions:/app/local_extensions"],"depends_on":["superset-init"]}],"exposedPorts":["80","6379","5432","8088","8080","9000"],"dockerRunCommand":"docker run -d --name superset -p 80:80 --restart always redis:7","podmanRunCommand":"podman run -d --name superset -p 80:80 --restart always redis:7","skopeoInspectCommand":"skopeo inspect docker://docker.io/library/redis:7","orasPullCommand":"oras pull redis:7","registryMeta":{"provider":"dockerhub","image":"library/redis","canonicalImage":"docker.io/library/redis:7","latestTag":"7","cliCommands":{"dockerRun":"docker run -d --name superset -p 80:80 --restart always redis:7","dockerPull":"docker pull redis:7","podmanRun":"podman run -d --name superset -p 80:80 --restart always redis:7","skopeoInspect":"skopeo inspect docker://docker.io/library/redis:7","orasPull":"oras pull redis:7","composeYaml":"services:\n  superset:\n    image: redis:7\n    restart: unless-stopped\n    ports:\n      - \"80:80\""}}}