Docker Collector Setup 3.3.193 ยท Support-assisted
Run a ReefMind Collector in Docker on a Linux VM, Proxmox LXC, NAS, or Mac instead of dedicated Pi hardware. You get the same Apex polling, camera snapshots, and cloud sync as the ReefMind Collector Box — no Pi required.
Docker Collector is currently a support-assisted setup. ReefMind support provides or enables the collector image/package for your account; if Docker reports a permission or image access error, email support@reefmind.ai.
What you need
- A host that can run Docker and Docker Compose (Linux VM, Proxmox LXC, NAS, or Mac).
- A ReefMind account with a tank already added at reefmind.ai.
- A 6-character Collector Authorization Code (created in the next step).
- For local devices (Apex, LAN cameras): the host must sit on the same network / subnet as those devices.
Your Apex controller IP and credentials are configured once in your ReefMind tank settings and are fetched automatically by the collector. You never put controller passwords into Docker.
1. Get your authorization code
- Sign in at reefmind.ai.
- Go to Settings → Collectors.
- Click Activate New Collector.
- Copy the 6-character Authorization Code (letters and numbers). It appears as
YOUR-6-CHARACTER-CODEin the examples below.
Treat the code like a password — it links a collector to your account. If it leaks, generate a new one from the same screen and the old one stops working.
2. Download and unpack the customer package
- Download
ReefMind-Docker-Collector.zipfrom the attachment or private link provided by ReefMind support. A public help-page link is not the Collector package. - Unzip it to a permanent folder. Do not run it directly from inside the ZIP.
- Open Docker Desktop and wait until its engine says it is running.
The package builds the Collector image locally on your computer. There is no registry sign-in, no private image download, and no ReefMind credential involved in the build — everything needed is already inside the ZIP. The expected runtime is 3.3.193.
The archive is built deterministically, so support can tell you the exact SHA-256 to expect. To check it before unzipping:
shasum -a 256 ReefMind-Docker-Collector.zip
Get-FileHash .\ReefMind-Docker-Collector.zip -Algorithm SHA256
If the hash does not match what support gave you, do not run the package — ask for it to be re-sent. If a Google Storage link returns AccessDenied, it is a private or stale link. Ask ReefMind support to attach the current ZIP directly. Do not change bucket permissions yourself.
3A. Windows Docker Desktop
- Install and open Docker Desktop for Windows. Use the normal WSL 2 setup when Docker Desktop recommends it.
- In Docker Desktop, open Settings → General, turn on Start Docker Desktop when you sign in to your computer, and apply the setting.
- If the Docker tray menu offers Switch to Linux containers, select it. Wait for Docker Desktop to say Engine running, then confirm PowerShell shows both Client and Server sections:
docker version
- Unzip
ReefMind-Docker-Collector.zipinto Downloads. - Open PowerShell.
- Run this block to enter the Compose folder and create the private configuration file without echoing the code:
Set-Location "$HOME\Downloads\ReefMind-Docker-Collector\docker-collector"
$code = Read-Host "Authorization code" -AsSecureString
$ptr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($code)
try {
$plain = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)
if ([string]::IsNullOrWhiteSpace($plain)) { throw "Authorization code cannot be empty" }
"REEFMIND_AUTHORIZATION_CODE=$plain" | Set-Content -Encoding ascii .env
} finally {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr)
Remove-Variable code,plain -ErrorAction SilentlyContinue
}
docker compose config --quiet
docker compose build --pull
docker compose up -d --build
Never post the code in Discord or email.
3B. Mac Docker Desktop
- Install and open Docker Desktop for Mac. Docker provides the correct build for Apple silicon or Intel.
- In Docker Desktop, open Settings → General, turn on Start Docker Desktop when you sign in, and apply the setting.
- Unzip
ReefMind-Docker-Collector.zipin Downloads. Open the Mac Terminal app. - Run this stock-zsh-compatible secure prompt. It refuses an empty code before writing
.env:
cd ~/Downloads/ReefMind-Docker-Collector/docker-collector
printf 'Authorization code: '
IFS= read -r -s REEFMIND_CODE
printf '\n'
if [[ -z "$REEFMIND_CODE" ]]; then
echo 'Authorization code cannot be empty' >&2
unset REEFMIND_CODE
return 1 2>/dev/null || exit 1
fi
( umask 077; printf 'REEFMIND_AUTHORIZATION_CODE=%s\n' "$REEFMIND_CODE" > .env )
unset REEFMIND_CODE
docker compose config --quiet
docker compose build --pull
docker compose up -d --build
3C. Linux / Proxmox / NAS
- Install Docker Engine and the Compose plugin for your distribution, then confirm the daemon responds:
docker version
- Unzip
ReefMind-Docker-Collector.zipinto Downloads, then use the same non-echoing, non-empty secure prompt as macOS:
cd ~/Downloads/ReefMind-Docker-Collector/docker-collector
printf 'Authorization code: '
IFS= read -r -s REEFMIND_CODE
printf '\n'
if [[ -z "$REEFMIND_CODE" ]]; then
echo 'Authorization code cannot be empty' >&2
unset REEFMIND_CODE
return 1 2>/dev/null || exit 1
fi
( umask 077; printf 'REEFMIND_AUTHORIZATION_CODE=%s\n' "$REEFMIND_CODE" > .env )
unset REEFMIND_CODE
docker compose config --quiet
docker compose build --pull
docker compose up -d --build
Host networking is native on Linux, so local Apex and camera discovery needs no extra configuration.
4. Verify the Collector
The package's Canonical Compose file uses Host Networking. On Docker Desktop, enable Host Networking when supported. On macOS, also allow Docker Desktop under Privacy & Security โ Local Network.
Run these commands in the docker-collector subfolder of the extracted package:
docker compose ps -a
docker compose logs --tail=100 reefmind-collector
docker inspect reefmind-collector --format 'version={{index .Config.Labels "ai.reefmind.collector.version"}} health={{.State.Health.Status}} network={{.HostConfig.NetworkMode}}'
docker volume inspect reefmind-data
Successful startup shows the container as healthy, the restart policy as unless-stopped, a 200 heartbeat, and a line such as Running as persistent service. Then refresh Settings → Collectors in ReefMind and confirm the Collector appears Online.
The unless-stopped policy restarts the Collector after a crash or computer reboot. Docker Desktop must also be configured to start when the user signs in. If someone manually stops the Collector, Docker leaves it stopped until it is started again.
Environment variables
| Variable | Required | Description |
|---|---|---|
REEFMIND_AUTHORIZATION_CODE | Yes, on first start | 6-character code from Settings → Collectors → Add Collector. |
REEFMIND_URL | No | ReefMind backend URL. Defaults to https://www.reefmind.ai. |
COLLECTOR_ID | No | Stable collector ID. Auto-generated and persisted in the /data volume; set it only if you need to pin one. |
There are no APEX_IP, APEX_USER, or APEX_PASS variables, and no API key is required for a normal setup. The collector authorizes with your 6-character code and pulls controller details from your ReefMind tank settings.
Local Apex and camera access
The Docker computer must be on the same home network as the Apex and local cameras. Configure the Apex's exact local IP address in ReefMind tank settings instead of relying only on automatic discovery.
- Linux VM / NAS / Proxmox — host networking works natively and remains the most predictable LAN option.
- Docker Desktop on macOS or Windows — the Collector can activate, remain online, and send cloud heartbeats. Local-device access depends on the Docker Desktop version, host-network support, firewall/VPN settings, and the home network. Confirm actual Apex readings after the first sync; an Online heartbeat alone does not prove local Apex access.
If the Collector is Online but readings do not update, do not reinstall it immediately. First verify the Apex IP in ReefMind, temporarily disconnect VPN software, allow Docker through the host firewall, and send the latest Collector logs to support.
Proxmox / VM notes
- Bridged network: give the VM/LXC a bridged adapter on the same subnet as the Apex so it works out of the box.
- Proxmox LXC: if you run Docker inside an LXC, enable nesting under Options → Features → Nesting.
- Static IP: assign a static IP to the VM/LXC so the collector stays stable.
- Resources: the collector is lightweight — a 1-core, 256 MB VM is plenty (it uses well under 128 MB of RAM).
Cameras
IP cameras on the same LAN work automatically; the collector uses ffmpeg (bundled in the image) for RTSP snapshots.
- Add cameras in the ReefMind dashboard under Settings → Cameras.
- Enter the camera's RTSP URL, e.g.
rtsp://192.168.1.50:554/stream1. - The collector captures a snapshot on each sync cycle.
Supported: any camera with RTSP output, plus TP-Link Tapo, Reolink, and generic ONVIF. Tapo/Kasa cameras use their local API directly. Wyze is temporarily unavailable while reliable RTSP support is rebuilt.
Updating
The Docker Collector does not self-update in place; that path is disabled by design because a container must be rebuilt from its baked image. Download and unzip the current support package, copy your existing .env into its folder, and rebuild. The named reefmind-data volume keeps the Collector identity and state:
docker compose build --pull
docker compose up -d --build
Synology Container Manager
Replace the project files with the current support ZIP, preserve docker-collector/.env, then use Container Manager Project โ Build/Recreate. Confirm reefmind-data:/data remains attached and never select a volume-deletion option.
Troubleshooting
Safe Mac/Linux commands
cd ~/Downloads/ReefMind-Docker-Collector/docker-collector
docker version
docker compose version
docker compose config --quiet
docker compose ps -a
docker compose logs --tail=100 reefmind-collector
docker inspect reefmind-collector --format 'version={{index .Config.Labels "ai.reefmind.collector.version"}} health={{.State.Health.Status}} network={{.HostConfig.NetworkMode}}'
docker volume inspect reefmind-data
curl -fsS https://www.reefmind.ai/api/status
nslookup www.reefmind.ai
Safe Windows PowerShell commands
Set-Location "$HOME\Downloads\ReefMind-Docker-Collector\docker-collector"
docker version
docker compose version
docker compose config --quiet
docker compose ps -a
docker compose logs --tail=100 reefmind-collector
docker inspect reefmind-collector --format 'version={{index .Config.Labels "ai.reefmind.collector.version"}} health={{.State.Health.Status}} network={{.HostConfig.NetworkMode}}'
docker volume inspect reefmind-data
Invoke-WebRequest -UseBasicParsing https://www.reefmind.ai/api/status | Select-Object StatusCode
Resolve-DnsName www.reefmind.ai
Windows: cannot connect to dockerDesktopLinuxEngine
Docker Desktop's Linux engine is not running. Open Docker Desktop, choose Switch to Linux containers if that option appears, wait for Engine running, and rerun docker version. Continue only when it shows both Client and Server sections.
Windows: build appears stuck at RUN npm ci --omit=dev
This step can be silent while npm downloads packages. Leave PowerShell and Docker Desktop open for 5–10 minutes. If the image eventually reports Built but no container starts, run docker compose up -d. If there is still no progress after 10 minutes, press Ctrl-C once, restart Docker Desktop, and run docker compose build --progress=plain again.
Collector won't start / key rejected
Check the logs from the extracted package folder:
docker compose logs --tail=60 reefmind-collector
If first activation reports an expired or consumed code, generate a fresh Authorization Code in Settings → Collectors → Add Collector, update .env through the secure platform prompt, and recreate the container. Preserve reefmind-data; contact support before any destructive reset.
ReefMind API and DNS reachability
Mac/Linux:
curl -fsS https://www.reefmind.ai/api/status
nslookup www.reefmind.ai
Windows PowerShell:
Invoke-WebRequest -UseBasicParsing https://www.reefmind.ai/api/status | Select-Object StatusCode
Resolve-DnsName www.reefmind.ai
Can't reach the Apex
- Confirm the container has host networking (
--network host). - From the host, check the Apex responds:
curl http://192.168.1.100/cgi-bin/status.json. - From inside the container:
docker exec reefmind-collector ping -c1 192.168.1.100.
Cameras not capturing
- Verify the RTSP URL from the host:
ffmpeg -i rtsp://camera-ip:554/stream1 -frames:v 1 test.jpg. - Confirm the camera is on the same LAN as the collector host.
Collector ID keeps changing
Use the named reefmind-data volume (so the generated ID persists) or set COLLECTOR_ID explicitly.
High memory use
The collector normally stays well under 128 MB. If memory climbs, check for camera snapshot buildup in the /data volume.
Support
Email support@reefmind.ai with your ReefMind account email, tank name, and the container logs (docker logs reefmind-collector). Never share your Authorization Code in a public forum.
Raspberry Pi / Collector Box
Use the separate hardware setup card in owner Settings. The Docker package and these commands perform no Pi OTA.