services: db: image: mysql:8.0 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: onestopshop MYSQL_USER: app MYSQL_PASSWORD: app ports: - "3307:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-proot"] interval: 5s timeout: 5s retries: 20 volumes: - db_data:/var/lib/mysql - ./db/init:/docker-entrypoint-initdb.d:ro web: build: context: . dockerfile: Dockerfile depends_on: db: condition: service_healthy environment: NODE_ENV: development DATABASE_URL: mysql://app:app@db:3306/onestopshop NEXT_PUBLIC_APP_URL: http://localhost:3000 ports: - "3000:3000" command: > sh -lc "until nc -z db 3306; do echo 'Waiting for MySQL...'; sleep 2; done; npm run dev -- --hostname 0.0.0.0" volumes: - .:/app - node_modules:/app/node_modules - next_cache:/app/.next db-reset: image: mysql:8.0 profiles: ["tools"] depends_on: db: condition: service_healthy volumes: - ./db/init:/seed:ro command: - sh - -lc - mysql -h db -u root -proot onestopshop < /seed/00-bootstrap.sql volumes: db_data: node_modules: next_cache: