services: clickhouse: image: "clickhouse/clickhouse-server:25.8.30.16" environment: CLICKHOUSE_DB: default CLICKHOUSE_USER: clickhouse CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: '1' CLICKHOUSE_PASSWORD: clickhouse ports: - "8123:8123" - "9000:9000" volumes: - clickhouse:/var/lib/clickhouse - ./clickhouse-config-generated.xml:/etc/clickhouse-server/config.d/config.xml:z grafana: image: grafana/grafana:12.0.0 volumes: - ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml:z environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor metricsSummary - GF_INSTALL_PLUGINS=https://storage.googleapis.com/integration-artifacts/grafana-exploretraces-app/grafana-exploretraces-app-latest.zip;grafana-traces-app ports: - "53000:3000" loki: image: grafana/loki:3.4.1 command: -config.file=/etc/loki/local-config.yaml ports: - "3100:3100" healthcheck: test: wget --quiet --tries=1 --output-document=- http://localhost:3100/ready | grep -q -w ready || exit 1 start_period: 20s interval: 10s timeout: 1s retries: 12 # try for 2 minutes memcached: image: memcached:1.6.38 container_name: memcached ports: - "11211:11211" environment: - MEMCACHED_MAX_MEMORY=64m # Set the maximum memory usage - MEMCACHED_THREADS=4 # Number of threads to use mimir: image: grafana/mimir:2.17.1 command: -config.file=/etc/mimir/mimir.yaml volumes: - ./mimir.yaml:/etc/mimir/mimir.yaml:z otel-collector: image: otel/opentelemetry-collector-contrib:0.163.2 volumes: - ./otel-collector.yaml:/etc/otelcol-contrib/config.yaml:z ports: - "4317:4317" # OTLP gRPC receiver - "4318:4318" # OTLP HTTP receiver" postgres: image: postgres:18-alpine environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres PGDATA: /var/lib/postgresql/18/docker ports: - "5432:5432" volumes: - postgres:/var/lib/postgresql redis: image: redis:7.4.6 ports: - "6379:6379" socks5: image: python:3.12-alpine command: >- sh -c "pip install --quiet pproxy && exec python -u -m pproxy -l socks5://0.0.0.0:1080#byopuser:byoppass -v" ports: - "1080:1080" tempo: image: grafana/tempo:2.8.2 command: [ "-config.file=/etc/tempo.yaml" ] volumes: - ./tempo.yaml:/etc/tempo.yaml:z - tempo:/var/tempo ports: - "3200" depends_on: - tempo-init - memcached # Tempo runs as user 10001, and docker compose creates the volume as root. # As such, we need to chown the volume in order for Tempo to start correctly. tempo-init: image: bash user: root entrypoint: - "chown" - "10001:10001" - "/var/tempo" volumes: - tempo:/var/tempo vector: image: timberio/vector:0.51.X-alpine depends_on: - loki environment: VECTOR_CONFIG: "/etc/vector.toml" VECTOR_LOG: "warn" ports: - "30006:30006" volumes: - ./vector.toml:/etc/vector.toml:z volumes: clickhouse: { } postgres: { } tempo: { }