Skip to content

Updating

A release has two moving parts: the images (ghcr.io/batazor/autopilot/bot:latest, web:latest) and the docker-compose.prod.yml itself. Pulling only the images is the most common mistake — the compose file evolves too (health checks, services, env), and your copy is a static download that nothing refreshes for you.

  1. Refresh the compose file. It changes between releases, and your local copy never updates itself:

    Terminal window
    curl -fsSL https://batazor.github.io/autopilot-page/docker-compose.prod.yml -o docker-compose.prod.yml
  2. Pull the new images and recreate the containers:

    Terminal window
    docker compose -f docker-compose.prod.yml up -d --pull always
  3. Check everything is healthy:

    Terminal window
    docker compose -f docker-compose.prod.yml ps

That’s the happy path. If a container comes back unhealthy or looks stuck on the old version, read the next section — it’s almost always this.

Trap: --pull always won’t fix a stuck container

Section titled “Trap: --pull always won’t fix a stuck container”

Force a clean recreation with an explicit down first:

Terminal window
docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml up -d --pull always

down removes the containers and the network but keeps all your data — your accounts are untouched.

Throw everything away — accounts, state, cache — and bring the stack back up empty:

Terminal window
docker compose -f docker-compose.prod.yml down -v
docker compose -f docker-compose.prod.yml up -d --pull always
  1. Read the real error. A failing health probe tells you nothing; the logs do:

    Terminal window
    docker logs autopilot-api
    docker logs autopilot-bot
  2. macOS / Windows — re-check Host networking. If the API never reaches healthy after an update, make sure Host networking is still enabled (Docker Desktop → Settings → Resources → Network). The stack relies on it — see Images & networking.

Still stuck? Head to Troubleshooting.