Updating via Portainer
Frigate, Caddy, and Portainer run as Docker containers. Image updates ship bug fixes, security patches, and new features from each project. This guide walks through pulling newer images and restarting containers safely using Portainer.
Updates can change behavior or require configuration adjustments. Back up first. See Backing up your Frigate configuration before pulling new images.
Before you start
This guide assumes:
- Portainer is running at
https://portainer.internal(or the NVR IP on port 9000) - You can log in to Portainer
- Frigate, Caddy, and Portainer containers already exist and were working before the update
If a container will not start after an update, see What to do when a container won't start. If you need to roll back config.yml, see Restoring from a backup.
What gets updated
| Container | Image source (typical) | Notes |
|---|---|---|
| frigate | ghcr.io/blakeblackshear/frigate |
Read Frigate release notes before major version jumps |
| caddy | caddy |
Usually backward compatible; Caddyfile syntax rarely breaks on minor updates |
| portainer | portainer/portainer-ce |
Update Portainer last so the UI stays available while updating other services |
Cockpit and the Ubuntu host are not updated here. See Updating Ubuntu Server for the operating system.
Recommended approach
- Back up
config.ymland your Caddyfile (backup guide). - Update one service at a time, starting with Frigate or Caddy, and confirm it still works before moving to the next.
- Read release notes for Frigate when moving between minor or major versions.
- Update during a quiet window when missed recordings are acceptable if something goes wrong.
Avoid pulling latest blindly on a production NVR without checking what changed. If you pin a specific tag (for example ghcr.io/blakeblackshear/frigate:0.15.0), pull that tag intentionally rather than always tracking latest.
Update a container in Portainer
These steps apply to each container you want to update. Repeat for frigate, caddy, and portainer.
Step 1 — Pull the new image
- Log in to Portainer.
- Go to Images in the left sidebar.
- Find the image used by your container (for example
ghcr.io/blakeblackshear/frigate). - Click the image name, then click Pull the image (or use Pull image from the Images list and enter the image name and tag).
Wait for the pull to complete. Portainer shows when the new image is available locally.
Step 2 — Recreate the container with the new image
- Go to Containers.
- Click the container name (for example
frigate). - Click Recreate (wording may vary slightly by Portainer version).
Read the confirmation dialog carefully:
- Re-pull image should be enabled if you already pulled in Step 1.
-
Preserve volumes must stay enabled. Your Frigate config, recordings mount, and Caddy certificate volumes live in Docker volumes or bind mounts. Recreating without volumes destroys that data.
-
Confirm and wait for the container to return to running status.
Step 3 — Verify the service
| Container | Quick check |
|---|---|
| frigate | Open https://frigate.internal, confirm live camera tiles and timeline |
| caddy | Open https://frigate.internal, https://portainer.internal, and https://cockpit.internal |
| portainer | Portainer UI still loads after updating itself |
Check logs if anything looks wrong:
Update from the command line
If Portainer is down, use SSH:
docker pull ghcr.io/blakeblackshear/frigate:stable
docker pull caddy:latest
docker pull portainer/portainer-ce:latest
Then recreate each container using the same docker run options, volume mounts, and network settings as before, with the new image. Portainer stores the original run parameters on each container's Duplicate/Edit screen if you need a reference.
For Frigate, a simple restart does not switch to a newly pulled image unless you recreate the container or use a compose stack that pins image IDs. After docker pull, use Portainer Recreate or stop/remove and run again with the updated image tag.
After updating Frigate
Frigate release notes occasionally mention configuration changes. After a Frigate update:
- Open the Frigate UI and confirm all cameras still stream
- Watch
docker logs frigate --tail 100for deprecation warnings - Test motion detection or a notification if you rely on them
If the container exits immediately, the log usually points to a config key that changed between versions. Restore your backup config if needed, then adjust settings using the current Frigate documentation.
Suggested update order
- Frigate — core NVR function; verify cameras and recording
- Caddy — reverse proxy; verify all hostnames
- Portainer — management UI last
Skipping straight to a full docker pull on everything at once makes it harder to tell which update caused a problem.
Where to go from here
- Updating Ubuntu Server, for host OS and kernel updates
- Backing up your Frigate configuration, if you have not backed up recently
- Restoring from a backup, to roll back configuration after a bad update
- What to do when a container won't start, if a container fails after recreate
Was this page helpful?
Found something wrong or out of date? Let us know below, or open a GitHub issue if you have a GitHub account.