claude-docker/scripts/claude-docker.sh
Vishal Jain dcc936dc10 Implement authentication persistence for Claude Docker
- Add persistent volume mount for Claude home directory (~/.claude)
- Create non-root user in Docker container for better security
- Mount host ~/.claude-docker/claude-home to container ~/.claude
- Update install script to create claude-home directory
- Check for existing credentials on startup
- Authentication tokens now persist across container restarts
2025-06-12 14:09:10 +01:00

53 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# ABOUTME: Wrapper script to run Claude Code in Docker container
# ABOUTME: Handles project mounting, .claude setup, and environment variables
# Get the absolute path of the current directory
CURRENT_DIR=$(pwd)
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# Check if .claude directory exists in current project, create if not
if [ ! -d "$CURRENT_DIR/.claude" ]; then
echo "Creating .claude directory for this project..."
mkdir -p "$CURRENT_DIR/.claude"
# Copy template files
cp "$PROJECT_ROOT/templates/.claude/settings.local.json" "$CURRENT_DIR/.claude/"
cp "$PROJECT_ROOT/templates/.claude/CLAUDE.md" "$CURRENT_DIR/.claude/"
# Create scratchpad.md if it doesn't exist
if [ ! -f "$CURRENT_DIR/scratchpad.md" ]; then
cp "$PROJECT_ROOT/templates/scratchpad.md" "$CURRENT_DIR/"
fi
echo "✓ Claude configuration created"
fi
# Check if .env file exists in user's home claude-docker directory
ENV_FILE="$HOME/.claude-docker/.env"
if [ ! -f "$ENV_FILE" ]; then
echo "⚠️ No .env file found at $ENV_FILE"
echo "Please create it with your API keys. See .env.example for reference."
exit 1
fi
# Build the Docker image if it doesn't exist
if ! docker images | grep -q "claude-docker"; then
echo "Building Claude Docker image..."
docker build -t claude-docker:latest "$PROJECT_ROOT"
fi
# Ensure the claude-home directory exists
mkdir -p "$HOME/.claude-docker/claude-home"
# Run Claude Code in Docker
echo "Starting Claude Code in Docker..."
docker run -it --rm \
-v "$CURRENT_DIR:/workspace" \
-v "$ENV_FILE:/app/.env:ro" \
-v "$HOME/.claude-docker/config:/app/.claude:rw" \
-v "$HOME/.claude-docker/claude-home:/home/claude-user/.claude:rw" \
--workdir /workspace \
--name claude-docker-session \
claude-docker:latest "$@"