{"owner":"quay","repo":"clair","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"docker-compose.yaml","servicesCount":17,"services":[{"name":"indexer","image":"quay.io/projectquay/golang:1.25","restart":"unless-stopped","command":"go run . -conf /etc/clair/${CLAIR_CONFIG:-config.yaml}","environment":["CLAIR_MODE=indexer"],"volumes":["./local-dev/clair:/etc/clair:ro",".:/src"],"depends_on":["clair-database"]},{"name":"matcher","image":"quay.io/projectquay/golang:1.25","restart":"unless-stopped","command":"go run . -conf /etc/clair/${CLAIR_CONFIG:-config.yaml}","environment":["CLAIR_MODE=matcher"],"volumes":["./local-dev/clair:/etc/clair:ro",".:/src"],"depends_on":["clair-database"]},{"name":"clair-database","image":"docker.io/library/postgres:15","environment":["POSTGRES_HOST_AUTH_METHOD=trust"],"volumes":["./local-dev/clair/init.sql:/docker-entrypoint-initdb.d/init.sql"]},{"name":"traefik","image":"docker.io/library/traefik:v3.0","ports":["6060:6060","8080:8080","8443","5432"],"volumes":["./local-dev/traefik/:/etc/traefik/:ro"],"depends_on":["matcher","indexer"]},{"name":"pgadmin","image":"docker.io/dpage/pgadmin4:5.7","environment":["PGADMIN_DEFAULT_EMAIL=clair@clair.com","PGADMIN_DEFAULT_PASSWORD=clair","PGADMIN_SERVER_JSON_FILE=/pgadmin4/config/servers.json","SCRIPT_NAME=/pgadmin"],"volumes":["./local-dev/pgadmin:/pgadmin4/config"],"depends_on":["clair-database"]},{"name":"jaeger","image":"docker.io/jaegertracing/all-in-one:1","environment":["QUERY_BASE_PATH=/jaeger","COLLECTOR_OTLP_ENABLED=true"]},{"name":"prometheus","image":"docker.io/prom/prometheus:latest","command":"--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.external-url=http://localhost:8080/prom/ --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles","volumes":["./local-dev/prometheus:/etc/prometheus/"]},{"name":"pyroscope","image":"docker.io/grafana/pyroscope:latest","command":"server","environment":["PYROSCOPE_LOG_LEVEL=info","PYROSCOPE_WAIT_AFTER_STOP=true"],"volumes":["./local-dev/pyroscope:/etc/pyroscope/"]},{"name":"grafana","image":"docker.io/grafana/grafana:10.3.1","environment":["GF_SERVER_ROOT_URL=/grafana","GF_SERVER_SERVE_FROM_SUB_PATH=true","GF_INSTALL_PLUGINS=pyroscope-datasource,pyroscope-panel"],"volumes":["./local-dev/grafana/provisioning/:/etc/grafana/provisioning/"],"depends_on":["prometheus","pyroscope"]},{"name":"postgres-exporter","image":"docker.io/prometheuscommunity/postgres-exporter:latest","environment":["DATA_SOURCE_NAME=postgresql://postgres@clair-database:5432/postgres?sslmode=disable"],"depends_on":["clair-database"]},{"name":"notifier","image":"quay.io/projectquay/golang:1.25","restart":"unless-stopped","command":"go run . -conf /etc/clair/${CLAIR_CONFIG:-config.yaml}","environment":["CLAIR_MODE=notifier","NOTIFIER_TEST_MODE=true"],"volumes":["./local-dev/clair:/etc/clair:ro",".:/src"],"depends_on":["clair-database"]},{"name":"webhook-target","image":"quay.io/projectquay/golang:1.25","restart":"unless-stopped","command":"go run ./notifier/webhook/cmd/webhookd -D -key c2VjcmV0","volumes":["./local-dev/clair:/etc/clair:ro",".:/src"],"depends_on":[]},{"name":"rabbitmq","image":"docker.io/library/rabbitmq:3","command":"sh -c set -e\nrabbitmq-plugins enable rabbitmq_stomp rabbitmq_management >/dev/null\nexec rabbitmq-server\n"},{"name":"quay","image":"quay.io/projectquay/quay:latest","environment":["DEBUGLOG=true","IGNORE_VALIDATION=true"],"volumes":["./local-dev/quay:/quay-registry/conf/stack"],"depends_on":["redis","clair-database"]},{"name":"redis","image":"docker.io/library/redis:6"},{"name":"quay-notifier","image":"quay.io/projectquay/golang:1.25","restart":"unless-stopped","command":"go run . -conf /etc/clair/${CLAIR_CONFIG:-config.yaml}","environment":["CLAIR_MODE=notifier"],"volumes":["./local-dev/clair:/etc/clair:ro",".:/src"],"depends_on":["clair-database"]},{"name":"skopeo","image":"quay.io/skopeo/stable:latest"}],"exposedPorts":["6060","8080","8443","5432"],"dockerRunCommand":"docker run -d --name clair -p 6060:6060 --restart always quay.io/projectquay/golang:1.25","podmanRunCommand":"podman run -d --name clair -p 6060:6060 --restart always quay.io/projectquay/golang:1.25","skopeoInspectCommand":"skopeo inspect docker://quay.io/projectquay/golang:1.25","orasPullCommand":"oras pull quay.io/projectquay/golang:1.25","registryMeta":{"provider":"quay","image":"quay.io/projectquay/golang:1.25","canonicalImage":"quay.io/projectquay/golang:1.25","latestTag":"1.25","multiArch":["linux/amd64","linux/arm64"],"cliCommands":{"dockerRun":"docker run -d --name clair -p 6060:6060 --restart always quay.io/projectquay/golang:1.25","dockerPull":"docker pull quay.io/projectquay/golang:1.25","podmanRun":"podman run -d --name clair -p 6060:6060 --restart always quay.io/projectquay/golang:1.25","skopeoInspect":"skopeo inspect docker://quay.io/projectquay/golang:1.25","orasPull":"oras pull quay.io/projectquay/golang:1.25","composeYaml":"services:\n  clair:\n    image: quay.io/projectquay/golang:1.25\n    restart: unless-stopped\n    ports:\n      - \"6060:6060\""}}}