Skip to main content

Docker Containers

This plan is in development. Implementation has not started yet.

Overview

Three official Docker images for running GAIA in isolated environments:
  1. Linux Runtime (amd/gaia:linux) - GAIA pre-installed via pip
  2. Windows Runtime (amd/gaia:windows) - GAIA pre-installed via pip
  3. Development (amd/gaia:dev) - Full dev environment with Claude Code sandboxing
All images are self-contained—you create the container, then connect from your host terminal using 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
Use cases:
  • 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:
Key design decisions:
  • 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 run time, 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
Environment variables:
  • LEMONADE_BASE_URL - Lemonade URL (required)
Example usage:
Dockerfile:

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
Environment variables:
  • LEMONADE_BASE_URL - Lemonade URL (required)
Example usage:
Dockerfile:

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
NOT included in image (cloned on container startup):
  • GAIA repository (cloned to /src/gaia on first run)
Environment variables (required at docker run):
  • LEMONADE_BASE_URL - Lemonade URL
  • GITHUB_TOKEN - Token for cloning GAIA repo on startup
Example usage:
Startup behavior: On container creation, an entrypoint script:
  1. Authenticates gh CLI with GITHUB_TOKEN
  2. Clones https://github.com/amd/gaia to /src/gaia
  3. Runs uv pip install -e ".[dev]" to install in editable mode
  4. Container remains running for docker exec connections
Claude Code sandboxing: The dev image includes bubblewrap and socat for Claude Code’s sandboxing:
Dockerfile:
Entrypoint script (entrypoint.sh):

Connecting to Lemonade Server

All images require LEMONADE_BASE_URL to connect to a Lemonade Server.

Server setup:

Install Lemonade with gaia 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:

Set LEMONADE_BASE_URL to the URL of your Lemonade Server when creating the container:
Note: Use 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:linux
  • docker pull amd/gaia:windows
  • docker 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