> ## Documentation Index
> Fetch the complete documentation index at: https://self-hosted-docs.relai.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> Common first-run issues and how to resolve them.

<AccordionGroup>
  <Accordion title="docker login fails">
    Your Docker Hub token has likely expired or was mistyped. Confirm it
    with RELAI and re-run:

    ```sh theme={"system"}
    echo $DOCKER_HUB_TOKEN | docker login -u relaiai --password-stdin
    ```
  </Accordion>

  <Accordion title="app-migrations exits with an error">
    Check its logs:

    ```sh theme={"system"}
    docker compose logs app-migrations
    ```

    This is usually a database credential mismatch — confirm `DB_NAME`,
    `DB_USER`, and `DB_PASSWORD` in `.env` match what the `db` container was
    created with. If you changed `DB_PASSWORD` after the first run, the
    MySQL data volume still has the old password; either reset the
    `mysql_data` volume (destroys existing data) or update the password
    inside MySQL to match.
  </Accordion>

  <Accordion title="A port is already in use on the host">
    Something else on the host is bound to `8889`, `5173`, `DB_PORT`, or
    `REDIS_PORT`. Either stop the conflicting process, or change the
    relevant port variable in `.env` and re-run
    `docker compose up -d --remove-orphans`.
  </Accordion>

  <Accordion title="The dashboard can't reach the backend">
    Check that `SERVER_BASE_URL` in `.env` matches how the dashboard should
    reach the backend (e.g. if you've put a reverse proxy or a different
    hostname in front of it), then restart the `dashboard` service:

    ```sh theme={"system"}
    docker compose up -d dashboard
    ```
  </Accordion>

  <Accordion title="Something else looks wrong">
    Check the logs for the specific service:

    ```sh theme={"system"}
    docker compose logs -f <service>
    ```

    If you're still stuck, reach out to RELAI with the output.
  </Accordion>
</AccordionGroup>
