This guide provides instructions for installing AnythingLLM using Docker. AnythingLLM is a full-stack AI application with built-in RAG, AI agents, and document chat capabilities.
Important: The Docker version supports multi-user mode with role-based access control, while the desktop app is for single-user use.
For Docker installation, see Docker.
docker pull mintplexlabs/anythingllm:master
Note: You can use either :master (recommended, always latest) or :latest (may be slightly behind). Versioned tags like :v1.11.0 are also available for pinned deployments.
export STORAGE_LOCATION=$HOME/anythingllm
mkdir -p $STORAGE_LOCATION
touch "$STORAGE_LOCATION/.env"
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm:latest
Open your browser and navigate to:
http://localhost:3001
mkdir -p /opt/anythingllm
cd /opt/anythingllm
mkdir -p storage
touch storage/.env
version: '3.8'
services:
anythingllm:
image: mintplexlabs/anythingllm:master
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
volumes:
- ./storage:/app/server/storage
- ./storage/.env:/app/server/.env
environment:
- STORAGE_DIR="/app/server/storage"
# Optional: Set specific workspaces directory
- WORKSPACES_DIR="/app/server/storage/workspaces"
networks:
- anythingllm-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
anythingllm-net:
driver: bridge
docker compose up -d
# Check container status
docker compose ps
# View logs
docker compose logs -f anythingllm
The --cap-add SYS_ADMIN capability is required for webpage scraping functionality. AnythingLLM uses PuppeteerJS to scrape website content, which requires running a sandboxed Chromium browser.
If you don’t need webpage scraping, you can omit the capability:
docker run -d -p 3001:3001 \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm:latest
Or in Docker Compose, simply remove the cap_add section.
| Variable | Default | Description |
|---|---|---|
STORAGE_DIR |
/app/server/storage |
Path to storage directory inside container |
WORKSPACES_DIR |
/app/server/storage/workspaces |
Path to workspaces directory |
DISABLE_TELEMETRY |
false |
Disable usage telemetry |
NODE_ENV |
production |
Node.js environment |
| Host Path | Container Path | Purpose |
|---|---|---|
./storage |
/app/server/storage |
All application data |
./storage/.env |
/app/server/.env |
Environment configuration |
./storage/workspaces |
/app/server/storage/workspaces |
Workspace data |
./storage/vector-cache |
/app/server/storage/vector-cache |
Vector embeddings cache |
Multi-user mode is only available in the Docker version. To enable:
http://localhost:3001After enabling multi-user mode:
http://localhost:3001/adminBy default, AnythingLLM binds to all interfaces (0.0.0.0). To restrict to localhost only:
services:
anythingllm:
# ... existing config ...
ports:
- "127.0.0.1:3001:3001"
To use a different port:
services:
anythingllm:
# ... existing config ...
ports:
- "8080:3001" # Host port 8080, container port 3001
If running Ollama on the same host:
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- ./ollama-data:/root/.ollama
ports:
- "11434:11434"
networks:
- anythingllm-net
anythingllm:
image: mintplexlabs/anythingllm:master
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
volumes:
- ./storage:/app/server/storage
- ./storage/.env:/app/server/.env
environment:
- STORAGE_DIR="/app/server/storage"
- OLLAMA_BASE_PATH="http://ollama:11434"
depends_on:
- ollama
networks:
- anythingllm-net
networks:
anythingllm-net:
driver: bridge
Then in the AnythingLLM Web UI:
http://ollama:11434# Stop the container
docker compose down
# Backup storage directory
tar -czf anythingllm-backup-$(date +%Y%m%d_%H%M%S).tar.gz storage/
# Restart
docker compose up -d
# Stop the container
docker compose down
# Extract backup
tar -xzf anythingllm-backup-YYYYMMDD_HHMMSS.tar.gz
# Restart
docker compose up -d
# Check logs
docker compose logs anythingllm
# Verify port is not in use
sudo lsof -i :3001
# Check volume permissions
ls -la storage/
Ensure SYS_ADMIN capability is enabled:
docker inspect anythingllm | grep -A5 CapAdd
Should show:
"CapAdd": ["SYS_ADMIN"]
# Check storage directory
ls -la storage/
# Verify .env file exists
cat storage/.env
# Check disk space
df -h storage/
# Stop and remove container
docker compose down
# Backup (optional)
mv storage storage.backup
# Create fresh storage
mkdir storage
touch storage/.env
# Start fresh
docker compose up -d
# Pull latest image
docker pull mintplexlabs/anythingllm:latest
# Restart with new image
docker compose down
docker compose up -d
# Verify version in Web UI
# Settings → About
For detailed security guidance, see AnythingLLM Security.
Deploying Anythingllm in containers for production? Our consulting covers:
Get expert help: office@linux-server-admin.com | Contact Page