Observability: Docker compose for Loki, Promtail and Grafana
• 3 min read • Updated May 27, 2025
Did some exploratory ELK stack stuff. Need a Docker Compose compatible logger
Loki, Grafana, Promtail
DC file that works!
x-logging: &default-logging driver: "json-file" options: max-size: "10m" max-file: "3" tag: "{{.ImageName}}|{{.Name}}|{{.ImageFullID}}|{{.FullID}}"
dashboard-frontend: build: context: ./frontend dockerfile: Dockerfile args: - VITE_API_BASE_URL=https://${API_BASE_URL}/api - VITE_PARTICIPANT_BASE_URL=https://${PARTICIPANT_BASE_URL} - VITE_BUILD_VERSION=${BUILD_VERSION} - VITE_USE_PARTICIPANT_ROUTER=0 restart: unless-stopped depends_on: - api-server logging: *default-logging
promtail: image: grafana/promtail:2.8.0 volumes: - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock - ./promtail-config.yaml:/etc/promtail/config.yaml command: -config.file=/etc/promtail/config.yaml networks: - default
loki: image: grafana/loki:latest restart: unless-stopped networks: - default volumes: - loki_data:/loki command: -config.file=/etc/loki/local-config.yaml
grafana: image: grafana/grafana:latest restart: unless-stopped entrypoint: - sh - -euc - | mkdir -p /etc/grafana/provisioning/datasources cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml apiVersion: 1 datasources: - name: Loki type: loki access: proxy url: http://loki:3100 EOF /run.sh ports: - "3000:3000" networks: - default volumes: - grafana_data:/var/lib/grafana depends_on: - loki
volumes: loki_data: grafana_data:
networks: default: driver: bridge