mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
feat(docker): add full-featured Docker image with MCP tools support
Add Dockerfile.full with Debian-based runtime including git, nodejs, npm, python3, and uv for MCP servers. Add docker-compose.full.yml with npm cache optimization. Add Makefile targets for docker-build-full, docker-run-full, and docker-test. Add test script for MCP tools validation.
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# ============================================================
|
||||
# Stage 1: Build the picoclaw binary
|
||||
# ============================================================
|
||||
FROM golang:1.26.0-alpine AS builder
|
||||
|
||||
RUN apk add --no-cache git make
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
# Cache dependencies
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# Copy source and build
|
||||
COPY . .
|
||||
RUN make build
|
||||
|
||||
# ============================================================
|
||||
# Stage 2: Debian-based runtime with full MCP support
|
||||
# ============================================================
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
# Install runtime dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
git \
|
||||
nodejs \
|
||||
npm \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& npm install -g npm@latest
|
||||
|
||||
# Install uv
|
||||
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
ENV PATH="/root/.cargo/bin:$PATH"
|
||||
|
||||
# Copy binary
|
||||
COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw
|
||||
|
||||
# Create picoclaw home directory
|
||||
RUN /usr/local/bin/picoclaw onboard
|
||||
|
||||
ENTRYPOINT ["picoclaw"]
|
||||
CMD ["gateway"]
|
||||
@@ -140,6 +140,44 @@ deps:
|
||||
run: build
|
||||
@$(BUILD_DIR)/$(BINARY_NAME) $(ARGS)
|
||||
|
||||
## docker-build: Build Docker image (minimal Alpine-based)
|
||||
docker-build:
|
||||
@echo "Building minimal Docker image (Alpine-based)..."
|
||||
docker-compose build
|
||||
|
||||
## docker-build-full: Build Docker image with full MCP support (Debian-based)
|
||||
docker-build-full:
|
||||
@echo "Building full-featured Docker image (Debian-based)..."
|
||||
docker-compose -f docker-compose.full.yml build
|
||||
|
||||
## docker-test: Test MCP tools in Docker container
|
||||
docker-test:
|
||||
@echo "Testing MCP tools in Docker..."
|
||||
@chmod +x scripts/test-docker-mcp.sh
|
||||
@./scripts/test-docker-mcp.sh
|
||||
|
||||
## docker-run: Run picoclaw gateway in Docker (Alpine-based)
|
||||
docker-run:
|
||||
docker-compose --profile gateway up
|
||||
|
||||
## docker-run-full: Run picoclaw gateway in Docker (full-featured)
|
||||
docker-run-full:
|
||||
docker-compose -f docker-compose.full.yml --profile gateway up
|
||||
|
||||
## docker-run-agent: Run picoclaw agent in Docker (interactive, Alpine-based)
|
||||
docker-run-agent:
|
||||
docker-compose run --rm picoclaw-agent
|
||||
|
||||
## docker-run-agent-full: Run picoclaw agent in Docker (interactive, full-featured)
|
||||
docker-run-agent-full:
|
||||
docker-compose -f docker-compose.full.yml run --rm picoclaw-agent
|
||||
|
||||
## docker-clean: Clean Docker images and volumes
|
||||
docker-clean:
|
||||
docker-compose down -v
|
||||
docker-compose -f docker-compose.full.yml down -v
|
||||
docker rmi picoclaw:latest picoclaw:full 2>/dev/null || true
|
||||
|
||||
## help: Show this help message
|
||||
help:
|
||||
@echo "picoclaw Makefile"
|
||||
@@ -155,6 +193,8 @@ help:
|
||||
@echo " make install # Install to ~/.local/bin"
|
||||
@echo " make uninstall # Remove from /usr/local/bin"
|
||||
@echo " make install-skills # Install skills to workspace"
|
||||
@echo " make docker-build # Build minimal Docker image"
|
||||
@echo " make docker-test # Test MCP tools in Docker"
|
||||
@echo ""
|
||||
@echo "Environment Variables:"
|
||||
@echo " INSTALL_PREFIX # Installation prefix (default: ~/.local)"
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
services:
|
||||
# ─────────────────────────────────────────────
|
||||
# PicoClaw Agent (one-shot query) - Full MCP Support
|
||||
# docker compose -f docker-compose.full.yml run --rm picoclaw-agent -m "Hello"
|
||||
# ─────────────────────────────────────────────
|
||||
picoclaw-agent:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.full
|
||||
container_name: picoclaw-agent-full
|
||||
profiles:
|
||||
- agent
|
||||
volumes:
|
||||
- ./config/config.json:/root/.picoclaw/config.json:ro
|
||||
- picoclaw-workspace:/root/.picoclaw/workspace
|
||||
- picoclaw-npm-cache:/root/.npm # npm cache for faster MCP server installs
|
||||
entrypoint: ["picoclaw", "agent"]
|
||||
stdin_open: true
|
||||
tty: true
|
||||
|
||||
# ─────────────────────────────────────────────
|
||||
# PicoClaw Gateway (Long-running Bot) - Full MCP Support
|
||||
# docker compose -f docker-compose.full.yml --profile gateway up
|
||||
# ─────────────────────────────────────────────
|
||||
picoclaw-gateway:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.full
|
||||
container_name: picoclaw-gateway-full
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- gateway
|
||||
volumes:
|
||||
# Configuration file
|
||||
- ./config/config.json:/root/.picoclaw/config.json:ro
|
||||
# Persistent workspace (sessions, memory, logs)
|
||||
- picoclaw-workspace:/root/.picoclaw/workspace
|
||||
# NPM cache for faster MCP server installs
|
||||
- picoclaw-npm-cache:/root/.npm
|
||||
command: ["gateway"]
|
||||
|
||||
volumes:
|
||||
picoclaw-workspace:
|
||||
picoclaw-npm-cache: # Cache npm packages to speed up MCP server installations
|
||||
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
# Test script for MCP tools in Docker (full-featured image)
|
||||
|
||||
set -e
|
||||
|
||||
COMPOSE_FILE="docker-compose.full.yml"
|
||||
|
||||
echo "🧪 Testing MCP tools in Docker container (full-featured image)..."
|
||||
echo ""
|
||||
|
||||
# Build the image
|
||||
echo "📦 Building Docker image..."
|
||||
docker-compose -f "$COMPOSE_FILE" build
|
||||
|
||||
# Test npx
|
||||
echo "✅ Testing npx..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'npx --version'
|
||||
|
||||
# Test npm
|
||||
echo "✅ Testing npm..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'npm --version'
|
||||
|
||||
# Test node
|
||||
echo "✅ Testing Node.js..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'node --version'
|
||||
|
||||
# Test git
|
||||
echo "✅ Testing git..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'git --version'
|
||||
|
||||
# Test python
|
||||
echo "✅ Testing Python..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'python3 --version'
|
||||
|
||||
# Test uv
|
||||
echo "✅ Testing uv..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'uv --version'
|
||||
|
||||
# Test MCP server installation (quick)
|
||||
echo "✅ Testing MCP server install with npx..."
|
||||
docker-compose -f "$COMPOSE_FILE" run --rm picoclaw-agent sh -c 'npx -y cowsay "MCP works!"'
|
||||
|
||||
echo ""
|
||||
echo "🎉 All MCP tools are working correctly!"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Configure MCP servers in config/config.json"
|
||||
echo " 2. Run: docker-compose -f $COMPOSE_FILE --profile gateway up"
|
||||
Reference in New Issue
Block a user