Docker Containers
Overview
Three official Docker images for running GAIA in isolated environments:- Linux Runtime (
amd/gaia:linux) - GAIA pre-installed via pip - Windows Runtime (
amd/gaia:windows) - GAIA pre-installed via pip - Development (
amd/gaia:dev) - Full dev environment with Claude Code sandboxing
docker exec -it.
Motivation
Pre-built Docker images enable rapid testing and development with GAIA in one or two commands. Spin up an isolated environment, run tests, and tear it down instantly. Key benefits:- Rapid testing: Launch GAIA in seconds with
docker run+docker exec - Clean isolation: Test different configurations without affecting your host system
- Consistent environments: Same setup across all platforms and team members
- Quick cleanup: Remove containers when done, no residual files
- Rapid prototyping and experimentation
- CI/CD pipelines and automated testing
- Development in isolated environments
- Multi-configuration testing
- Containerized deployments
Architecture
Common Design Pattern
All three images follow the same pattern:- Self-contained: No volume mounts required (optional for persistence)
- Background execution: Containers run detached, accessed via
docker exec - Consistent ports: All images expose the same ports for predictability
- Environment config: Set at
docker runtime, not build time
Port Mappings
All images expose the same ports for consistency:
Map ports when creating container:
Image Specifications
1. Linux Runtime Image
Name:amd/gaia:linux
Base: python:3.12-slim
Contents:
- Python 3.12
- GAIA installed via
pip install amd-gaia - zsh shell
- Git, curl, basic utilities
LEMONADE_BASE_URL- Lemonade URL (required)
2. Windows Runtime Image
Name:amd/gaia:windows
Base: mcr.microsoft.com/windows/servercore:ltsc2022
Contents:
- Python 3.12
- GAIA installed via
pip install amd-gaia - PowerShell + cmd available
- Git for Windows
LEMONADE_BASE_URL- Lemonade URL (required)
3. Development Image
Name:amd/gaia:dev
Base: ubuntu:24.04
Contents (pre-installed in image):
- Python 3.12 + UV package manager
- Node.js LTS v20 + npm
- GitHub CLI (
gh) - Claude Code (
npm install -g @anthropic-ai/claude-code) - Sandboxing dependencies:
bubblewrap,socat - zsh shell, git, build tools
- GAIA repository (cloned to
/src/gaiaon first run)
docker run):
LEMONADE_BASE_URL- Lemonade URLGITHUB_TOKEN- Token for cloning GAIA repo on startup
- Authenticates
ghCLI withGITHUB_TOKEN - Clones
https://github.com/amd/gaiato/src/gaia - Runs
uv pip install -e ".[dev]"to install in editable mode - Container remains running for
docker execconnections
bubblewrap and socat for Claude Code’s sandboxing:
entrypoint.sh):
Connecting to Lemonade Server
All images requireLEMONADE_BASE_URL to connect to a Lemonade Server.
Server setup:
Install Lemonade withgaia init, then start it bound to an interface the
containers can reach rather than loopback. How the server is launched differs
per platform, so follow the Lemonade Server
docs for yours.
gaia daemon start is not a substitute here: the daemon only ever starts a
loopback server, and refuses a non-loopback LEMONADE_BASE_URL rather than
silently starting something the containers can’t use.
Container configuration:
SetLEMONADE_BASE_URL to the URL of your Lemonade Server when creating the container:
host.docker.internal to reference the host machine from inside the container (Docker Desktop feature).
Image Build & Distribution
Build locally
Official distribution
Images will be published to Docker Hub:docker pull amd/gaia:linuxdocker pull amd/gaia:windowsdocker pull amd/gaia:dev
Versioning
Images follow GAIA’s semantic versioning:amd/gaia:linux(latest)amd/gaia:linux-0.15.2(specific version)amd/gaia:dev(latest dev environment)
Vote on this plan: GitHub Issue #270