MinerU Docker & Self-Hosted Deployment

GitHub

Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows.

RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/mineru
2. Docker Run (1-Click Launch) docker run -d --name mineru -p 30000:30000 --restart always mineru:4
3. Podman Run podman run -d --name mineru -p 30000:30000 --restart always mineru:4
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/mineru:4
5. ORAS Pull (OCI Artifact) oras pull mineru:4
6. Compose Deployment docker compose up -d
docker/compose.yaml
Download .yml
services:
  mineru-openai-server:
    image: mineru:4
    container_name: mineru-openai-server
    restart: always
    profiles: ["openai-server"]
    ports:
      - 30000:30000
    environment:
      MINERU_MODEL_SOURCE: local
    entrypoint: ["mineru-kit"]
    command:
      - vlm-server
      - --host
      - 0.0.0.0
      - --port
      - "30000"
      # --gpu-memory-utilization 0.5  # If encountering VRAM shortage, reduce the KV cache size by this parameter; if VRAM issues persist, try lowering it further to `0.4` or below.
    ulimits:
      memlock: -1
      stack: 67108864
    ipc: host
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:30000/health || exit 1"]
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["0"]  # Modify for multiple GPUs: ["0", "1"]
              capabilities: [gpu]

  mineru-api:
    image: mineru:4
    container_name: mineru-api
    restart: always
    profiles: ["api"]
    ports:
      - 8000:8000
    environment:
      MINERU_MODEL_SOURCE: local
    entrypoint: ["mineru-kit"]
    command:
      - api-server
      - --host
      - 0.0.0.0
      - --port
      - "8000"
    ulimits:
      memlock: -1
      stack: 67108864
    ipc: host
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8000/v1/health || exit 1"]
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["0"]  # Modify for multiple GPUs: ["0", "1"]
              capabilities: [gpu]

  mineru-router:
    image: mineru:4
    container_name: mineru-router
    restart: always
    profiles: ["router"]
    ports:
      - 8002:8002
    environment:
      MINERU_MODEL_SOURCE: local
    entrypoint: ["mineru-kit"]
    command:
      - router
      - --host
      - 0.0.0.0
      - --port
      - "8002"
      - --local-gpus
      - auto
      - --worker-tier
      - standard
      - --worker-concurrency
      - "1"
      # --preload-models  # Preload models in router-managed mineru-kit api-server workers.
      # To aggregate existing mineru-api services instead of starting local workers:
      # --local-gpus none
      # --upstream-url http://mineru-api:8000
      # --upstream-url http://mineru-api-2:8000
    ulimits:
      memlock: -1
      stack: 67108864
    ipc: host
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8002/v1/health || exit 1"]
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["0"]  # Modify for multiple GPUs: ["0", "1"]
              capabilities: [gpu]

  mineru-webui:
    image: mineru:4
    container_name: mineru-webui
    restart: always
    profiles: ["webui"]
    ports:
      - 7860:7860
    environment:
      MINERU_MODEL_SOURCE: local
    entrypoint: ["mineru-kit"]
    command:
      - webui
      - --server-name
      - 0.0.0.0
      - --server-port
      - "7860"
      # --no-enable-api  # Disable the Gradio event API.
      # --api-server-tier standard  # Configure the managed V1 API server capability tier.
    ulimits:
      memlock: -1
      stack: 67108864
    ipc: host
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["0"]  # Modify for multiple GPUs: ["0", "1"]
              capabilities: [gpu]