Deploy CrewAI applications using Docker.
Note: CrewAI does not provide an official Docker image. You can create a custom Dockerfile for your application.
FROM python:3.11-slim
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV CREWAI_TELEMETRY_DISABLED=true
# Default command
CMD ["python", "src/my_crew/main.py"]
crewai==1.10.1
crewai-tools>=0.10.0
python-dotenv>=1.0.0
langchain-openai>=0.2.0
docker build -t crewai-app .
docker run -it --rm \
-e OPENAI_API_KEY="sk-your-key" \
-e SERPER_API_KEY="your-serper-key" \
-v $(pwd)/output:/app/output \
crewai-app
version: "3.9"
services:
crewai:
build: .
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- SERPER_API_KEY=${SERPER_API_KEY}
- CREWAI_TELEMETRY_DISABLED=true
volumes:
- ./output:/app/output
- ./config:/app/config
stdin_open: true
tty: true
# Create .env file
cat > .env << EOF
OPENAI_API_KEY=sk-your-key
SERPER_API_KEY=your-serper-key
EOF
# Start container
docker compose up -d
# View logs
docker compose logs -f
# Run interactively
docker compose run --rm crewai python src/my_crew/main.py
# Build stage
FROM python:3.11-slim as builder
WORKDIR /app
RUN apt-get update && apt-get install -y \
git \
build-essential \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# Runtime stage
FROM python:3.11-slim
WORKDIR /app
# Create non-root user
RUN useradd -m -u 1000 crewai
# Copy from builder
COPY --from=builder /root/.local /home/crewai/.local
COPY --chown=crewai:crewai . .
# Set environment
ENV PATH=/home/crewai/.local/bin:$PATH
ENV PYTHONUNBUFFERED=1
ENV CREWAI_TELEMETRY_DISABLED=true
USER crewai
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "print('healthy')" || exit 1
CMD ["python", "src/my_crew/main.py"]
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama-data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
crewai:
build: .
environment:
- OPENAI_API_KEY=ollama
- OPENAI_API_BASE=http://ollama:11434/v1
- MODEL_NAME=llama3.1
depends_on:
- ollama
volumes:
- ./output:/app/output
volumes:
ollama-data:
from crewai import Agent, Crew
from langchain_ollama import ChatOllama
llm = ChatOllama(
model="llama3.1",
base_url="http://ollama:11434"
)
agent = Agent(
role="Researcher",
goal="Research topics",
backstory="You're a researcher.",
llm=llm
)
version: "3.9"
services:
crewai:
build: .
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- REDIS_HOST=redis
- REDIS_PORT=6379
depends_on:
- redis
volumes:
- ./output:/app/output
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: redis-server --appendonly yes
volumes:
redis-data:
apiVersion: apps/v1
kind: Deployment
metadata:
name: crewai-deployment
spec:
replicas: 1
selector:
matchLabels:
app: crewai
template:
metadata:
labels:
app: crewai
spec:
containers:
- name: crewai
image: your-registry/crewai-app:latest
env:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: crewai-secrets
key: openai-api-key
- name: CREWAI_TELEMETRY_DISABLED
value: "true"
volumeMounts:
- name: output-volume
mountPath: /app/output
volumes:
- name: output-volume
persistentVolumeClaim:
claimName: crewai-output-pvc
apiVersion: batch/v1
kind: Job
metadata:
name: crewai-job
spec:
template:
spec:
containers:
- name: crewai
image: your-registry/crewai-app:latest
env:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: crewai-secrets
key: openai-api-key
restartPolicy: Never
backoffLimit: 1
# Check logs
docker logs crewai-app
# Run interactively for debugging
docker run -it --rm crewai-app /bin/bash
# In docker-compose.yml
services:
crewai:
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 2G
# Verify environment variable is set
docker run --rm crewai-app env | grep OPENAI