Deploy: Docker

Deploy agents to Docker containers using praisonai deploy

Build and deploy agents as Docker containers using praisonai deploy run --type docker.

Quick Start – CLI

  1. Install PraisonAI
    bash
    pip install praisonai
  2. Set API Key
    bash
    export OPENAI_API_KEY="your-key"
  3. Initialize Docker Config
    bash
    praisonai deploy init --file agents.yaml --type docker
  4. Deploy to Docker
    bash
    praisonai deploy run --file agents.yaml --type docker

    Expected Output:

    🚀 Starting deployment...
    
    📦 Building Docker image: praisonai-app:latest
      • Base image: python:3.11-slim
      • Exposing ports: [8005]
    
    ✅ Deployment successful!
    🔗 URL: http://localhost:8005
    
    Metadata:
      • type: docker
      • image: praisonai-app:latest
      • container_id: abc123def456
  5. Verify
    bash
    docker ps | grep praisonai
    curl http://localhost:8005/health

Quick Start – SDK

  1. Create Deploy Script
    python
    from praisonai.deploy import Deploy, DeployConfig, DeployType
    from praisonai.deploy.models import DockerConfig
    
    config = DeployConfig(
        type=DeployType.DOCKER,
        docker=DockerConfig(
            image_name="praisonai-app",
            tag="latest",
            base_image="python:3.11-slim",
            expose=[8005],
            push=False
        )
    )
    
    deploy = Deploy(config, "agents.yaml")
    result = deploy.deploy()
    
    print(f"Image: {result.metadata.get('image')}")
    print(f"Container: {result.metadata.get('container_id')}")
  2. Run
    bash
    python deploy_docker.py

agents.yaml with Docker Config

yaml
framework: praisonai
topic: helpful assistant
roles:
  assistant:
    role: Assistant
    goal: Help users with their questions
    backstory: You are a helpful assistant
    tasks:
      help_task:
        description: Answer user questions
        expected_output: Helpful response

deploy:
  type: docker
  docker:
    image_name: "praisonai-app"
    tag: "latest"
    base_image: "python:3.11-slim"
    expose: [8005]
    push: false
    registry: null
  # Optional sibling block — configures the generated in-container server.
  api:
    host: 0.0.0.0
    port: 8005
    auth_enabled: false   # exposes /chat without a token

Docker Config Options

FieldTypeDefaultDescription
image_namestringpraisonai-appDocker image name
tagstringlatestDocker image tag
base_imagestringpython:3.11-slimBase Docker image
exposelist[int][8005]Ports to expose
registrystringnullDocker registry URL
pushboolfalsePush image to registry
build_argsdictnullDocker build arguments

In-container API server (sibling api: block)

Docker deploys generate a Flask API server inside the container. Configure it with a sibling api: block under deploy:.

yaml
deploy:
  type: docker
  docker:
    image_name: praisonai-app
    expose: [8005]
  api:
    host: 0.0.0.0
    port: 8005
    auth_enabled: false   # /chat without a bearer token
BehaviorEffect
Omit the blockAuth on, CORS on, port 8005, bearer token required for /chat
auth_enabled: falseInjects PRAISONAI_API_AUTH=disabled into the container; /chat is reachable without a token
auth_enabled: true (or omitted)No env override; the generated server enforces auth

Push to Registry

yaml
deploy:
  type: docker
  docker:
    image_name: "praisonai-app"
    tag: "v1.0.0"
    registry: "your-registry.com/your-org"
    push: true
bash
praisonai deploy run --file agents.yaml --type docker

Expected Output:

🚀 Starting deployment...

📦 Building Docker image: your-registry.com/your-org/praisonai-app:v1.0.0
📤 Pushing to registry: your-registry.com/your-org

✅ Deployment successful!

Metadata:
  • image: your-registry.com/your-org/praisonai-app:v1.0.0
  • pushed: true

Check Status

bash
praisonai deploy status --file agents.yaml

Stop Container

bash
praisonai deploy destroy --file agents.yaml

Expected Output:

⚠️  Warning: This will destroy the deployment!
File: agents.yaml
Service: praisonai-app

Type 'yes' to confirm destruction: yes

🗑️ Destroying deployment...

✅ Deployment destroyed successfully

Deleted resources:
  • container: praisonai-app-abc123
  • image: praisonai-app:latest (local)

Environment Variables

VariableRequiredDescription
OPENAI_API_KEYYes*OpenAI API key
ANTHROPIC_API_KEYNoAnthropic API key
GROQ_API_KEYNoGroq API key
PRAISONAI_API_AUTHNoSet to disabled by the deploy layer when api.auth_enabled: false. Do not set manually.

*Required if using OpenAI models.

Troubleshooting

IssueFix
Docker not runningStart Docker daemon
Build failedCheck Dockerfile syntax, run praisonai deploy doctor
Push failedCheck registry credentials
Port in useChange port in agents.yaml
Container exitsCheck logs: docker logs <container>
Manual Docker Commands (Optional)

These commands are for manual validation only. Use praisonai deploy for deployment.

bash
# Build manually
docker build -t praisonai-app:latest .

# Run manually
docker run -p 8005:8005 -e OPENAI_API_KEY=$OPENAI_API_KEY praisonai-app:latest

# Check logs
docker logs <container_id>

# Stop
docker stop <container_id>

Related