← Back to Wiki

Docker Collector Setup 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

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

  1. Sign in at reefmind.ai.
  2. Go to Settings → Collectors.
  3. Click Add Collector.
  4. Copy the 6-character Authorization Code (letters and numbers). It appears as YOUR-6-CHARACTER-CODE in 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

  1. Download ReefMind-Docker-Collector.zip from the attachment or private link provided by ReefMind support. A public help-page link is not the Collector package.
  2. Unzip it to a permanent folder. Do not run it directly from inside the ZIP.
  3. Open Docker Desktop and wait until its engine says it is running.

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 with Docker Desktop

  1. Install and open Docker Desktop for Windows. Use the normal WSL 2 setup when Docker Desktop recommends it.
  2. In Docker Desktop, open Settings → General, turn on Start Docker Desktop when you sign in to your computer, and apply the setting.
  3. 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
  1. Unzip ReefMind-Docker-Collector.zip. Open the extracted ReefMind-Docker-Collector folder.
  2. Right-click an empty area in the folder and choose Open in Terminal (PowerShell).
  3. Create the private configuration file and open it in Notepad:
Copy-Item .env.example .env
notepad .env

Replace only PASTE_CODE_HERE with your private 6-character Authorization Code, save the file, and close Notepad. Never post the code in Discord or email.

Back in PowerShell, start the Collector. PowerShell does not run scripts from the current folder unless the command begins with .\:

.\start-windows.bat

If Windows does not run the helper, build first and then start the container:

docker compose build --progress=plain
docker compose up -d

3B. macOS with Docker Desktop

  1. Install and open Docker Desktop for Mac. Docker provides the correct build for Apple silicon or Intel.
  2. In Docker Desktop, open Settings → General, turn on Start Docker Desktop when you sign in, and apply the setting.
  3. Unzip ReefMind-Docker-Collector.zip in Downloads. Open the Mac Terminal app.
  4. Run:
cd ~/Downloads/ReefMind-Docker-Collector
cp .env.example .env
open -e .env

In TextEdit, replace only PASTE_CODE_HERE with your private 6-character Authorization Code. Press Command-S, close TextEdit, and return to Terminal.

chmod +x start.sh start.command
./start.command

If the helper does not run, use the equivalent Compose command:

docker compose up -d --build

4. Verify the Collector

Run these commands in the extracted package folder:

docker compose ps
docker compose logs --tail=60 reefmind-collector
docker inspect --format '{{.State.Health.Status}}' reefmind-collector
docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' reefmind-collector

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

VariableRequiredDescription
REEFMIND_AUTHORIZATION_CODEYes, on first start6-character code from Settings → Collectors → Add Collector.
REEFMIND_URLNoReefMind backend URL. Defaults to https://www.reefmind.ai.
COLLECTOR_IDNoStable 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.

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

Cameras

IP cameras on the same LAN work automatically; the collector uses ffmpeg (bundled in the image) for RTSP snapshots.

  1. Add cameras in the ReefMind dashboard under Settings → Cameras.
  2. Enter the camera's RTSP URL, e.g. rtsp://192.168.1.50:554/stream1.
  3. 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

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

Troubleshooting

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 you see 401 Unauthorized or a rejected key, generate a fresh Authorization Code in Settings → Collectors → Add Collector, update your .env, and recreate the container. If it still uses the old key, remove the reefmind-data volume and start again with the new code.

Can't reach the Apex

Cameras not capturing

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.