Docker Installation Guide
Clone is designed to work alongside your existing NVR system (Frigate, Shinobi, Blue Iris, etc.) to provide unified camera management across your entire network.
📋 Prerequisites
Before installing Clone, ensure you have:
- Docker and Docker Compose installed on your system
- Existing NVR system (Frigate, Shinobi, Blue Iris, etc.) with a
config.yml
file - Network access to your IP cameras
- Host system with at least 2GB RAM and 5GB free disk space
Supported Platforms
- ✅ x86_64 - Standard PCs, servers, NUCs
- ✅ ARM64 - Raspberry Pi 4/5, ZimaBoard, ARM servers
- ✅ Fanless NVR boxes and single board computers
- ✅ Linux (Ubuntu, Debian, CentOS, etc.)
- ✅ Windows with WSL2 and Docker Desktop
- ✅ macOS with Docker Desktop
🗂️ Step 1: Create Clone Directory
Create a dedicated directory for Clone on your system. This can be on the same host as your NVR system.
Choose your preferred location:
Option 1: Standard Docker location
sudo mkdir -p /docker/clone
cd /docker/clone
Option 2: Opt directory (common for applications)
sudo mkdir -p /opt/clone
cd /opt/clone
Option 4: Any location you prefer
sudo mkdir -p /this_parrot_is_dead/clone
cd /this_parrot_is_dead/clone
(note: replace 'this_parrot_is_dead' with your actual directory
or you will have an EX-application)
Set proper ownership (replace with your username):
sudo chown -R $USER:$USER /your-chosen-directory/clone
📄 Step 2: Copy NVR Configuration
Copy your existing NVR configuration file to the Clone directory:
For Frigate Users
Copy from Frigate installation directory
cp /path/to/frigate/config/config.yml ./config.yml
Example locations:
cp /opt/frigate/config.yml ./config.yml
cp /docker/frigate/config.yml ./config.yml
cp ~/.config/frigate/config.yml ./config.yml
For Shinobi Users
Copy Shinobi configuration (adapt as needed)
cp /path/to/shinobi/conf.json ./config.yml
For Blue Iris or Other NVR Users
If you don't have a config.yml
file, create a basic one:
cat > clone.yml << 'EOF'
cameras:
# Replace with your camera details
camera_01:
name: "Front Door Camera"
host: "192.168.1.100"
# Clone will auto-detect protocol (Dahua, ONVIF, etc.)
camera_02:
name: "Backyard Camera"
host: "192.168.1.101"
# Add more cameras as needed
EOF
🐳 Step 3: Download Docker Compose File
Download the sample compose.yml
file:
# Download the official compose file
curl -o compose.yml https://raw.githubusercontent.com/pocovocho/clone/main/compose.yml
Or create compose.yml
manually:
services:
clone:
container_name: clone
image: ghcr.io/pocovocho/clone:latest
network_mode: host # Needed for direct camera access
privileged: true
stop_grace_period: 30s
restart: unless-stopped
ports:
- "1776:1776" # Web UI
- "1512:1512" # go2rtc streaming
- "1911:1911" # FastAPI backend
- "8555:8555" # Additional streaming
- "8554:8554" # RTSP
volumes:
# Configuration and data persistence
- ./config:/config:rw
- ./config:/clone/config:rw
- .:/root_mount:rw
- ./clone/db:/clone/db:rw
# System time synchronization
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
# Optional: RAM cache to reduce disk wear
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
tmpfs:
- /dev/shm:rw,exec,nosuid,size=64m
environment:
# Core Clone settings
- CLONE_CONFIG=/config/clone.yml
- CLONE_API_HOST=127.0.0.1
- CLONE_API_PORT=1911
- CLONE_BASE_PATH=
# Streaming settings
- ENABLE_GO2RTC=true
- GO2RTC_HOST=127.0.0.1
- GO2RTC_PORT=1512
- INTERNAL_GO2RTC_PORT=1512
- EXTERNAL_GO2RTC_PORT=1984
⚙️ Step 4: Customize Configuration
Edit the compose.yml
file to match your system:
nano compose.yml
Required Changes
Update directory paths - Replace /user_defined_directory/clone
with your actual directory:
volumes:
# Change this line:
- /user_defined_directory/clone/config:/config:rw
# To your actual path:
- /docker/clone/config:/config:rw
Optional Customizations
Go2RTC Settings:
- Set
ENABLE_GO2RTC=false
if you already have Frigate's go2rtc running - Adjust Go2RTC ports if they conflict
Resource Limits (add if needed):
deploy:
resources:
limits:
memory: 2G
cpus: '1.0'
🚀 Step 5: Launch Clone
Start Clone using Docker Compose:
# Pull latest image and start Clone
docker compose up -d
# View logs to ensure successful startup
docker compose logs -f clone
🌐 Step 6: Access Clone Web Interface
Open your web browser and navigate to:
Local access:
http://localhost:1776
Remote access (replace with your server's IP):
http://192.168.1.50:1776
http://your-server-ip:1776
🔐 Default Login Credentials
Username: admin
Password: admin
⚠️ Security Note: Change the default password immediately after first login!
📁 Directory Structure
After installation, your directory should look like:
/your-chosen-directory/clone/
├── compose.yml # Docker Compose configuration
├── config.yml # Your NVR configuration file
├── clone/
│ └── db/ # Clone database (created on first run)
│ └── clone.db
└── config/ # Clone configuration directory (created on first run)
└── clone.yml # Processed configuration
🔧 Useful Commands
Managing Clone Service
# Start Clone
docker compose up -d
# Stop Clone
docker compose down
# Restart Clone
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d
# View logs
docker compose logs -f clone
# View last 100 log lines
docker compose logs --tail 100 clone
Troubleshooting Commands
# Check container status
docker ps
# Enter Clone container for debugging
docker exec -it clone bash
# Check disk usage
docker system df
# Remove unused Docker resources
docker system prune
🔍 Verification
To verify your installation is working correctly:
-
Check container status:
docker ps
Should show
clone
container with statusUp
-
Check logs for errors:
docker compose logs clone | grep -i error
Should return no critical errors
-
Test web access:
- Navigate to
http://localhost:1776
- Should see Clone login page
- Navigate to
-
Verify camera discovery:
- Check logs:
docker compose logs clone | grep -i "discovered"
- Should show cameras found from your config file
- Check logs:
⚡ Quick Health Check
# Run this one-liner to check Clone status
echo "Clone Status:" && docker ps --filter name=clone --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" && echo -e "\nRecent Logs:" && docker logs --tail 5 clone
🎯 Next Steps
Once Clone is running successfully:
- Complete the Quick Start Tutorial - Configure your first cameras
- Set up Camera Authentication - Add camera credentials
- Synchronize Camera Settings - Import existing camera configurations
🆘 Common Issues
Port conflicts:
- Change port
1776
to another port in compose.yml - Ensure ports aren't used by other services
Permission issues:
- Check directory ownership:
ls -la
- Fix with:
sudo chown -R $USER:$USER ./
Config file not found:
- Verify
config.yml
exists in the correct location - Check volume mapping in compose.yml
Can't access web interface:
- Verify container is running:
docker ps
- Check firewall settings
- Try using server IP instead of localhost
For additional help, see the Troubleshooting Guide or join our Discord Community.