version: "3.7"
services:

  quay-db:
    container_name: quay-db
    image: postgres:12.1
    environment:
      POSTGRES_USER: "quay"
      POSTGRES_PASSWORD: "quay"
      POSTGRES_DB: "quay"
    volumes:
      - "./local-dev/init/pg_bootstrap.sql:/docker-entrypoint-initdb.d/pg_bootstrap.sql"
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U quay -d quay"]
      interval: 10s
      timeout: 9s
      retries: 3
      start_period: 10s

  clair-db:
    container_name: clair-db
    image: postgres:12.1
    environment:
      POSTGRES_USER: "clair"
      POSTGRES_DB: "clair"
    ports:
      - "5433:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U clair -d clair"]
      interval: 10s
      timeout: 9s
      retries: 3
      start_period: 10s

  redis:
    container_name: quay-redis
    image: redis:latest
    ports:
      - "6379:6379"

  quay:
    container_name: quay-quay
    build: 
      context: .
      dockerfile: ./local-dev/Dockerfile
    image: quay-local:local
    volumes:
      - ".:/quay-registry"
    ports:
      - "8080:8080" 
    environment:
      DEBUGLOG: "true"
      IGNORE_VALIDATION: "true"

  # clair is configured to share it's network 
  # namespace with quay. this allows quay to serve
  # layers to clair over localhost.
  clair:
    container_name: quay-clair
    image: quay.io/projectquay/clair:4.0.0-rc.22
    volumes:
      - "./local-dev/clair:/src/clair/"
    environment:
      CLAIR_CONF: "/src/clair/config.yaml"
      CLAIR_MODE: "combo"
    network_mode: "service:quay"
    command:
      ["bash", "-c", "cd /src/clair/cmd/clair; go run -mod vendor ."]
    depends_on:
      - quay

