Portainer Templates logo

Portainer Templates

Qdrant Qdrant

Stack

Search Vectors

Qdrant vector database, single container + volume, internal-only by default (no API key is configured; the project network is the boundary).

Image details

Pulls: 47.1M
Architecture: amd64, arm64
Image size: 7.8 GB
Latest: v1.19-gpu-amd
User: generall
Created: Feb 03, 2022
Updated: 14 minutes ago
Status: active

Source details

Stars: 34.8k
Forks: 3k
Language: Rust
License: Apache-2.0
Updated: 4 minutes ago
Website: qdrant.tech/

Configuration

Type
Compose
Platform
linux
Image
qdrant/qdrant:v1.18.3
Ports
6333:63336334:6334
Volumes
/qdrant/storage : qdrantdata
Restart
unless-stopped
Source

Standalone Install

Select an install method, to see config/commands for deploying Qdrant

Installation method

Install on Portainer

Import all app templates into your Portainer instance, for easy 1-click deploys

  1. Ensure both Docker and Portainer are installed, and up-to-date
  2. Log into your Portainer web UI
  3. Under Settings → App Templates, paste the below URL
  4. Head to Home → App Templates, and the list of apps will show up
  5. Select Qdrant, fill in any config options, and hit Deploy

Template Import URL

https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json
Show Me demo
Original stackfile

The compose file this template deploys, straight from its repo:

name: qdrant

services:
  qdrant:
    healthcheck:
      test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/6333'"]
      interval: 10s
      timeout: 5s
      retries: 5
    image: qdrant/qdrant:v1.18.3
    restart: unless-stopped
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrantdata:/qdrant/storage

volumes:
  qdrantdata:

Or deploy it directly from the source:

git clone https://github.com/deployable-sh/stacks
cd stacks
docker compose -f qdrant/compose.yaml up -d

More install options in our documentation, or see qdrant/qdrant for app-specific guidance.

<source media="(prefers-color-scheme: dark)" srcset="https://github.com/qdrant/qdrant/raw/master/docs/logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://github.com/qdrant/qdrant/raw/master/docs/logo-light.svg">
<img height="100" alt="Qdrant" src="https://github.com/qdrant/qdrant/raw/master/docs/logo.svg">


<b>Vector Search Engine for the next generation of AI applications</b>


<a href="https://github.com/qdrant/qdrant/actions/workflows/rust.yml"><img src="https://img.shields.io/github/actions/workflow/status/qdrant/qdrant/rust.yml?style=flat-square" alt="Tests status"></a>
<a href="https://api.qdrant.tech/"><img src="https://img.shields.io/badge/Docs-OpenAPI%203.0-success?style=flat-square" alt="OpenAPI Docs"></a>
<a href="https://github.com/qdrant/qdrant/blob/master/LICENSE"><img src="https://img.shields.io/github/license/qdrant/qdrant?style=flat-square" alt="Apache 2.0 License"></a>
<a href="https://qdrant.to/discord"><img src="https://img.shields.io/discord/907569970500743200?logo=Discord&style=flat-square&color=7289da" alt="Discord"></a>
<a href="https://qdrant.to/roadmap"><img src="https://img.shields.io/badge/Roadmap-2025-bc1439.svg?style=flat-square" alt="Roadmap 2025"></a>
<a href="https://cloud.qdrant.io/"><img src="https://img.shields.io/badge/Qdrant-Cloud-24386C.svg?logo=cloud&style=flat-square" alt="Qdrant Cloud"></a>


Qdrant (read: quadrant) is a vector similarity search engine and vector database. It provides a production-ready service with a convenient API to store, search, and manage points—vectors with an additional payload Qdrant is tailored to extended filtering support. It makes it useful for all sorts of neural-network or semantic-based matching, faceted search, and other applications.
Qdrant is written in Rust 🦀, which makes it fast and reliable even under high load. See benchmarks.
With Qdrant, embeddings or neural network encoders can be turned into full-fledged applications for matching, searching, recommending, and much more!
Qdrant is also available as a fully managed Qdrant Cloud ⛅ including a free tier.

Quick StartClient LibrariesDemo ProjectsIntegrationsContact

Getting Started

Python

pip install qdrant-client

The python client offers a convenient way to start with Qdrant locally:
from qdrant_client import QdrantClient
qdrant = QdrantClient(":memory:") # Create in-memory Qdrant instance, for testing, CI/CD
# OR
client = QdrantClient(path="path/to/db")  # Persists changes to disk, fast prototyping

Client-Server

To experience the full power of Qdrant locally, run the container with this command:
docker run -p 6333:6333 qdrant/qdrant

Now you can connect to this with any client, including Python:
qdrant = QdrantClient("http://localhost:6333") # Connect to existing Qdrant instance

Before deploying Qdrant to production, be sure to read our installation
and security guides.

Clients

Qdrant offers the following client libraries to help you integrate it into your application stack with ease:
  • Official:
- Go client - Rust client - JavaScript/TypeScript client - Python client - .NET/C# client - Java client
  • Community:
- Elixir - PHP - Ruby - Java

Where do I go from here?

Demo Projects Run on Repl.it

Discover Semantic Text Search 🔍

Unlock the power of semantic embeddings with Qdrant, transcending keyword-based search to find meaningful connections in short texts. Deploy a neural search in minutes using a pre-trained neural network, and experience the future of text search. Try it online!

Explore Similar Image Search - Food Discovery 🍕

There's more to discovery than text search, especially when it comes to food. People often choose meals based on appearance rather than descriptions and ingredients. Let Qdrant help your users find their next delicious meal using visual search, even if they don't know the dish's name. Check it out!

Master Extreme Classification - E-commerce Product Categorization 📺

Enter the cutting-edge realm of extreme classification, an emerging machine learning field tackling multi-class and multi-label problems with millions of labels. Harness the potential of similarity learning models, and see how a pre-trained transformer model and Qdrant can revolutionize e-commerce product categorization. Play with it online!
More solutions
<tr>
    <td width="30%">
        <img src="https://qdrant.tech/content/images/text_search.png">
    </td>
    <td width="30%">
        <img src="https://qdrant.tech/content/images/image_search.png">
    </td>
    <td width="30%">
        <img src="https://qdrant.tech/content/images/recommendations.png">
    </td>
</tr>
<tr>
    <td>
        Semantic Text Search
    </td>
    <td>
        Similar Image Search
    </td>
    <td>
        Recommendations
    </td>
</tr>

<tr>
    <td>
        <img width="300px" src="https://qdrant.tech/content/images/chat_bots.png">
    </td>
    <td>
        <img width="300px" src="https://qdrant.tech/content/images/matching_engines.png">
    </td>
    <td>
        <img width="300px" src="https://qdrant.tech/content/images/anomalies_detection.png">
    </td>
</tr>
<tr>
    <td>
        Chat Bots
    </td>
    <td>
        Matching Engines
    </td>
    <td>
        Anomaly Detection
    </td>
</tr>

API

REST

Online OpenAPI 3.0 documentation is available here. OpenAPI makes it easy to generate a client for virtually any framework or programming language.
You can also download raw OpenAPI definitions.

gRPC

For faster production-tier searches, Qdrant also provides a gRPC interface. You can find gRPC documentation here.

Features

Filtering and Payload

Qdrant can attach any JSON payloads to vectors, allowing for both the storage and filtering of data based on the values in these payloads. Payload supports a wide range of data types and query conditions, including keyword matching, full-text filtering, numerical ranges, geo-locations, and more.
Filtering conditions can be combined in various ways, including should, must, and must_not clauses, ensuring that you can implement any desired business logic on top of similarity matching.

Hybrid Search with Sparse Vectors

To address the limitations of vector embeddings when searching for specific keywords, Qdrant introduces support for sparse vectors in addition to the regular dense ones.
Sparse vectors can be viewed as an generalization of BM25 or TF-IDF ranking. They enable you to harness the capabilities of transformer-based neural networks to weigh individual tokens effectively.

Vector Quantization and On-Disk Storage

Qdrant provides multiple options to make vector search cheaper and more resource-efficient. Built-in vector quantization reduces RAM usage by up to 97% and dynamically manages the trade-off between search speed and precision.

Distributed Deployment

Qdrant offers comprehensive horizontal scaling support through two key mechanisms:
  1. Size expansion via sharding and throughput enhancement via replication
  2. Zero-downtime rolling updates and seamless dynamic scaling of the collections

Highlighted Features

  • Query Planning and Payload Indexes - leverages stored payload information to optimize query execution strategy.
  • SIMD Hardware Acceleration - utilizes modern CPU x86-x64 and Neon architectures to deliver better performance.
  • Async I/O - uses io_uring to maximize disk throughput utilization even on a network-attached storage.
  • Write-Ahead Logging - ensures data persistence with update confirmation, even during power outages.

Integrations

Examples and/or documentation of Qdrant integrations:

Contacts

License

Qdrant is licensed under the Apache License, Version 2.0. View a copy of the License file.

Serve Qdrant on your own domain behind Caddy, Nginx or Traefik. Fill in your domain and copy the result. It's a starting point, some apps need their own base URL or extra headers set too.

Proxying qdrant.example.com to http://qdrant:6333

Add this to your Caddyfile

qdrant.example.com {
	reverse_proxy http://qdrant:6333
}

Check the logs first

Nine times out of ten the logs tell you exactly what went wrong.

  • In Portainer, go to Containers, click the container, then Logs. Or run docker logs <container>
  • Exit codes help too: 137 means killed, usually out of memory. 126 or 127 means the command inside the image is broken.

Port already in use

If deployment fails with "Bind for 0.0.0.0:6333 failed: port is already allocated", something else on your server is using that port.

  • Find what's using it: sudo ss -tlnp | grep :6333
  • Stop the other service, or pick a different host port. In 6333:6333 only the left number is yours to change, the right one belongs to the app.

Running but the page won't load

The container is up but nothing appears in your browser.

  • Use your server's real IP: http://your-server-ip:6333. The 0.0.0.0 link Portainer shows isn't a real address.
  • Give it a minute after first deploy, qdrant can take a while to initialise.
  • Make sure your firewall allows the port, e.g. sudo ufw allow 6333

Image won't pull

Test the pull directly on the host: docker pull qdrant/qdrant:v1.18.3

  • "manifest unknown" means the tag no longer exists.
  • "toomanyrequests" is the Docker Hub rate limit. Log in with docker login to raise it.
  • "no space left on device" means a full disk. Reclaim space with docker system prune

"exec format error"

This means the image was built for a different CPU architecture than your server.

  • This image supports: amd64, arm64
  • Check yours with uname -m: x86_64 is amd64, aarch64 is arm64. Raspberry Pi and other ARM boards are the usual culprits.

Container keeps restarting

The unless-stopped restart policy relaunches the app after every crash, so the real error can scroll past.

  • Check the logs right after a restart, the last few lines before it died are the useful ones.
  • Get the exit code with docker inspect <container> --format '{{.State.ExitCode}}'
  • Still stuck? Redeploy once with the restart policy set to no so the failure stays visible.

Stack won't deploy

Compose stacks fail fast on small mistakes, and Portainer shows the reason just above the editor.

  • YAML only accepts spaces for indentation, a single tab breaks the whole file.

Raise an issue

Found something which isn't working as it should? Here's how to report it.

A Compose stack

Qdrant is a Compose stack, a set of containers defined in one file and brought up together by Portainer, then started and stopped as a single app.

The app image

An image is the app packed up ready to go, everything Qdrant needs bundled into one download. This template pulls qdrant/qdrant:v1.18.3, which Docker fetches once (about 7.8 GB) and then starts your own copy from.

Where the image comes from

Docker pulls its images from registries, public libraries of ready-built apps. Qdrant's comes from Docker Hub, published by qdrant.

Version tags

The bit after the colon in the image name is the version tag. This one pins v1.18.3, so every redeploy gives you that exact build until you bump it yourself.

Which machines it runs on

Every image is built for particular CPU types. This one ships for amd64, arm64, so it runs on both regular x86 servers and ARM boards like a Raspberry Pi.

Ports

A port is the door the app answers on. A mapping like 6333:6333 means it's reachable on port 6333 of your server, where the left number is yours to change and the right one belongs to the app. It opens:

  • 6333:6333
  • 6334:6334

Volumes

A volume is where Qdrant keeps its files so they survive an update or a restart. Without one, anything it saves would sit inside the container and vanish the moment it's recreated. This template mounts:

  • /qdrant/storage kept in the qdrantdata volume Docker manages

Restart policy

The restart policy here is unless-stopped, so Docker restarts Qdrant after a crash or reboot, but leaves it off when you stop it on purpose. You can change this on the deploy screen. The choices are no (never restart), on-failure (only after a crash), unless-stopped (restart unless you stop it), and always (bring it back no matter what).

Health check

A health check is how Docker tells whether Qdrant is really working, not just switched on. It runs bash -c ':> /dev/tcp/127.0.0.1/6333' every 10s and flags the container as unhealthy if that keeps failing.

Networking

Nothing custom is set, so Qdrant sits on Docker's default bridge network: its own private space that reaches the outside world only through the ports it publishes.

Container name

Once it's deployed, Portainer names the container qdrant. That's what you'll spot in the containers list and use in commands like docker logs qdrant.

Platform

The platform is linux, the kind of system the container is built to run on. Docker and Portainer handle this on a normal Linux server.

Open source license

Qdrant is open source, released under the Apache-2.0 license. In plain terms the code is out in the open, so you're free to run it and change it to fit what you need.

Portainer app templates

Zooming out, this whole page comes from a Portainer app template: a short recipe telling Portainer how to set Qdrant up. Add the template list to Portainer once, then deploying Qdrant is a click rather than a wall of config.