Complete Docker deployment guide for RAGFlow, the open-source RAG engine with deep document understanding.
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores | 8+ cores |
| RAM | 16 GB | 32+ GB |
| Disk | 50 GB | 100+ GB |
| Component | Version |
|---|---|
| Docker | ≥24.0.0 |
| Docker Compose | ≥v2.26.1 |
| gVisor | Required for code executor |
Important:
Elasticsearch requires memory mapping to be configured:
# Check current value
sysctl vm.max_map_count
# Set temporarily (resets on reboot)
sudo sysctl -w vm.max_map_count=262144
# Make permanent
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
cp .env.example .env
nano .env
Key settings:
# RAGFlow Image
RAGFLOW_IMAGE=infiniflow/ragflow:v0.24.0
# Device (cpu or gpu)
DEVICE=cpu
# HTTP Port
SVR_HTTP_PORT=80
# Database
MYSQL_PASSWORD=your-secure-password
# MinIO Storage
MINIO_PASSWORD=your-secure-password
# Document Engine (elasticsearch or infinity)
DOC_ENGINE=elasticsearch
docker compose -f docker-compose.yml up -d
# Enable GPU in .env
sed -i '1i DEVICE=gpu' .env
# Start with GPU
docker compose -f docker-compose.yml up -d
# View logs
docker compose logs -f ragflow
# Check all containers
docker compose ps
# Check service health
curl http://localhost/health
Successful startup shows:
____ ___ ______ ______ __
/ __ \ / | / ____// ____// /____ _ __
/ /_/ // /| | / / __ / /_ / // __ \| |
/ / / _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ / /_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/
* Running on all addresses (0.0.0.0)
Open your browser and navigate to:
http://localhost
(Default port 80, no port number needed)
| Action | Command |
|---|---|
| Start service | docker compose -f docker-compose.yml up -d |
| Stop service | docker compose -f docker-compose.yml down |
| View logs | docker compose logs -f ragflow |
| Rebuild images | docker compose -f docker-compose.yml up -d --build |
| Restart service | docker compose -f docker-compose.yml restart |
| Scale service | docker compose up -d --scale ragflow=3 |
To run RAGFlow on a custom port:
# Edit docker-compose.yml
nano docker-compose.yml
# Change port mapping:
ports:
- "8080:80" # Use port 8080 instead of 80
Restart:
docker compose -f docker-compose.yml up -d
# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
# Edit .env
nano .env
# Add or uncomment:
DEVICE=gpu
# Restart
docker compose -f docker-compose.yml up -d
# Check NVIDIA GPU
nvidia-smi
# Check container GPU access
docker compose exec ragflow nvidia-smi
# Stop and remove volumes
docker compose -f docker-compose.yml down -v
# Edit .env
nano .env
# Change: DOC_ENGINE=infinity
# Restart
docker compose -f docker-compose.yml up -d
⚠️ Warning:
-vremoves all volumes and existing data!
# Ubuntu/Debian
curl -fsSL https://gvisor.dev/archive.key | sudo gpg --dearmor -o /usr/share/keyrings/gvisor.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/gvisor.gpg] https://storage.googleapis.com/gvisor/releases stable main" | sudo tee /etc/apt/sources.list.d/gvisor.list
sudo apt-get update && sudo apt-get install runsc
# Edit Docker daemon config
sudo nano /etc/docker/daemon.json
# Add gVisor runtime:
{
"runtimes": {
"runsc": {
"path": "/usr/bin/runsc"
}
}
}
# Restart Docker
sudo systemctl restart docker
Edit docker-compose.yml:
services:
ragflow:
runtime: runsc
# ... other config
# Navigate to ragflow directory
cd ragflow
# Pull latest changes
git pull
# Rebuild and restart
docker compose -f docker-compose.yml up -d --build --pull always
# Stop containers
docker compose -f docker-compose.yml down
# Backup MySQL
docker run --rm \
-v ragflow_mysql_data:/source \
-v $(pwd):/backup \
alpine tar czf mysql-backup.tar.gz -C /source .
# Backup MinIO
docker run --rm \
-v ragflow_minio_data:/source \
-v $(pwd):/backup \
alpine tar czf minio-backup.tar.gz -C /source .
# Restore MySQL
docker run --rm \
-v ragflow_mysql_data:/target \
-v $(pwd):/backup \
alpine tar xzf mysql-backup.tar.gz -C /target .
# Restore MinIO
docker run --rm \
-v ragflow_minio_data:/target \
-v $(pwd):/backup \
alpine tar xzf minio-backup.tar.gz -C /target .
# Restart
docker compose -f docker-compose.yml up -d
# Check logs
docker compose logs -f ragflow
# Verify vm.max_map_count
sysctl vm.max_map_count
# Restart Docker
sudo systemctl restart docker
# Verify memory mapping
sysctl vm.max_map_count
# Should be ≥262144
# Check if port 80 is in use
sudo lsof -i :80
# Change port in docker-compose.yml
# 8080:80 # Use port 8080 instead
# ARM64 requires custom build
docker build --platform linux/arm64 \
-f Dockerfile \
-t infiniflow/ragflow:custom .
# Verify NVIDIA Container Toolkit
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
# Check device visibility
ls -la /dev/nvidia*
# In docker-compose.yml
services:
ragflow:
deploy:
resources:
limits:
cpus: '4'
memory: 8G
reservations:
cpus: '2'
memory: 4G
Any questions?
Feel free to contact us. Find all contact information on our contact page.