Updating PacketPilot Analyze
How to update PacketPilot Analyze — online with Docker pull, or offline with a full release package for air-gapped environments.
Updating PacketPilot Analyze
PacketPilot Analyze is a Docker Compose stack. Updating means replacing the service images and optionally updating the compose file and environment template.
Finding Your Current Version
The running Analyze version is shown in two places:
- Web UI footer — every page has a version number in the bottom-right corner
- API endpoint —
GET /api/versionreturns the current version:
curl http://localhost:8000/api/version
# {"version": "1.0.0", "buildDate": "2026-05-11T18:00:00Z"}
Online Update (Connected)
Use this method when the Analyze server has internet access.
Step 1: Check for Updates
Compare the version shown in the web UI footer against the latest release on packetpilot.db-electronics.no/docs/updates/analyze.
Or use the API directly:
curl http://localhost:8000/api/version
# {"version": "1.0.0", "buildDate": "2026-05-11T18:00:00Z"}
Step 2: Pull Latest Images
Navigate to your Analyze deployment directory and pull the updated images:
cd ~/packetpilot-analyze
docker compose pull
This downloads only the layers that have changed since your last pull. It is significantly faster than a full download.
Step 3: Update the Compose File (If Provided)
If the release includes an updated docker-compose.yml, compare it with your current one and merge any new or changed settings:
# Backup current
cp docker-compose.yml docker-compose.yml.backup
# Pull the new compose file (or download from the release page)
# Then check for new/changed service definitions
diff docker-compose.yml.backup docker-compose.yml
Key things to preserve from your current setup:
- Volume mappings (
/data,/postgres) - Port bindings (if you've changed them from defaults)
- Environment variable values in
.env(never overwrite.envwith a fresh.env.example)
Step 4: Restart the Stack
docker compose down
docker compose up -d
Step 5: Verify
docker compose ps
# All services should show "Up"
Check the web UI footer — the version number should reflect the new release.
Air-Gapped Update (Offline)
Use this method when the Analyze server has no internet access.
The process has two phases: prepare on a connected machine, then deploy on the air-gapped server.
Phase 1: Prepare on a Connected Machine
1a. Pull and Export All Images
On a machine with Docker and internet access:
# Create a working directory
mkdir -p ~/packetpilot-offline-update
cd ~/packetpilot-offline-update
# Pull the latest images
docker pull postgres:16-alpine
docker pull ollama/ollama:latest
docker pull packetpilot/backend:latest
docker pull packetpilot/frontend:latest
docker pull packetpilot/license-server:latest
# Export each image as a tarball
docker save postgres:16-alpine -o postgres.tar
docker save ollama/ollama:latest -o ollama.tar
docker save packetpilot/backend:latest -o backend.tar
docker save packetpilot/frontend:latest -o frontend.tar
docker save packetpilot/license-server:latest -o license-server.tar
Image tags may differ. Check the current
docker-compose.ymlin your deployment for the exact image names and tags used in your release.
1b. Download the Release Package
Download the latest PacketPilot-Analyze-Suite-vX.Y.zip release package from the download link. This contains:
docker-compose.yml(updated).env.example(compare with your current.env)CHANGELOG.md/ release notesVERSIONfile (semantic version + build date)
1c. Calculate Checksums
# Generate checksums for all tarballs and the zip package
sha256sum *.tar *.zip > checksums.txt
1d. Transfer to Air-Gapped Environment
Transfer the entire ~/packetpilot-offline-update/ directory to the air-gapped machine using USB drive or your approved transfer medium:
Required files:
postgres.tar
ollama.tar
backend.tar
frontend.tar
license-server.tar
docker-compose.yml # updated compose file
.env.example # compare with existing .env
CHANGELOG.md # release notes
VERSION # version file
checksums.txt # SHA-256 checksums for verification
Phase 2: Deploy on the Air-Gapped Server
2a: Verify Checksums
Before loading any images, verify the checksums of the transferred files:
# On the air-gapped server
sha256sum --check checksums.txt
If any file shows FAILED, discard it and re-transfer that file.
2b: Backup Current Deployment
cd ~/packetpilot-analyze
# Backup data
docker compose exec postgres pg_dump -U postgres packetpilot > backup_$(date +%Y%m%d).sql
# Backup current compose file
cp docker-compose.yml docker-compose.yml.backup
# Backup current .env
cp .env .env.backup
2c: Load Images
cd ~/packetpilot-offline-update
docker load -i postgres.tar
docker load -i ollama.tar
docker load -i backend.tar
docker load -i frontend.tar
docker load -i license-server.tar
Verify the images are loaded:
docker images | grep -E 'postgres|ollama|backend|frontend|license-server'
2d: Update Compose File
Compare the new docker-compose.yml with your backup and merge any new service settings:
diff docker-compose.yml.backup docker-compose.yml
Apply only changes that are new in the compose file — preserve your volume mappings, port bindings, and .env values.
2e: Update Ollama Model (If Required)
If the release includes a new or updated Ollama model:
docker load -i ollama-mistral.tar # or whatever model tarballs are in the release
Then update OLLAMA_MODEL in .env if the model name changed.
2f: Restart the Stack
cd ~/packetpilot-analyze
docker compose down
docker compose up -d
2g: Verify
docker compose ps
# All services should show "Up"
curl http://localhost:8000/api/version
# Should return the new version
Open the web UI at http://localhost:3000 and confirm the footer shows the updated version.
Version Endpoint
The Analyze backend exposes the current version at:
GET /api/version
Response:
{
"version": "1.2.0",
"buildDate": "2026-05-11T18:00:00Z"
}
buildDate is null if no build date is configured.
This endpoint does not require authentication.
Data Persistence
Your data is stored in Docker volumes, not in the images. Updating images does not affect:
- Existing cases and findings
- Uploaded artifacts
- User accounts and API tokens
- License state
Only the service containers are replaced. Volumes are preserved across updates as long as your docker-compose.yml references the same volume names.
Rollback (If Needed)
If an update causes problems:
# Stop the stack
docker compose down
# Restore the previous compose file
cp docker-compose.yml.backup docker-compose.yml
# Restore the previous images (if you kept the old tarballs)
docker load -i postgres-backup.tar
# ... load other backup tarballs ...
# Restart
docker compose up -d
If you did not keep backup tarballs, pull the previous image tags from the registry (connected machine required) or restore from the database backup (backup_YYYYMMDD.sql).
Getting Help
If an update fails or causes unexpected behavior, contact support@db-electronics.no with:
- The output of
docker compose ps - The output of
docker compose logsfor the affected service - Your current version (from
/api/version)