Skip to main content
In development, Docker runs only the services GAIA depends on: databases, queues and a few helpers. Your code (API, web, bots) runs natively through mise, so it hot-reloads. Every mise dev* command starts these services for you, so you rarely touch Docker directly. Running GAIA for real rather than developing it? Self-Hosting uses a different, self-contained compose file that gaia up manages. The compose file is infra/docker/docker-compose.yml. Nx wraps it as the docker project:

Default services

docker compose up with no profile starts these: Each host port can be moved with an environment variable named after it, for example MONGO_HOST_PORT=27018. The variable names are in the ports: lines of the compose file.

Profiles

A profile is a named group of extra services that only start when you ask for it with --profile:

Inspect and reset

Data lives in named Docker volumes (mongo_data, pgdata, redis_data, chroma_data, rabbitmq_data and others), so it survives docker:down and restarts. To start from empty databases:
down -v deletes every local database, including your development user. Run mise seed again afterwards.

Troubleshooting

Find what holds it with lsof -i :27017 (use the port from the error). Stop that process, or move GAIA’s port with its environment variable, for example MONGO_HOST_PORT=27018, and update the matching URL in apps/api/.env.
Read its logs: docker compose -f infra/docker/docker-compose.yml logs <service>.
Run docker compose -f infra/docker/docker-compose.yml ps and wait until the service shows healthy.