| name | act-docker-setup |
| user-invocable | false |
| description | Use when configuring Docker environments for act, selecting runner images, managing container resources, or troubleshooting Docker-related issues with local GitHub Actions testing. |
| allowed-tools | ["Read","Write","Edit","Bash","Grep","Glob"] |
Act - Docker Configuration and Setup
Use this skill when configuring Docker for act, choosing runner images, managing container resources, and optimizing Docker performance for local GitHub Actions workflow testing.
Runner Images
Image Size Categories
Act supports three image size categories:
| Size | Image | Tools | Use Case |
|---|
| Micro | node:16-buster-slim | Minimal | Simple Node.js workflows |
| Medium | catthehacker/ubuntu:act-* | Common tools | Most workflows |
| Large | catthehacker/ubuntu:full-* | Everything | Maximum compatibility |
Official catthehacker Images
act -P ubuntu-latest=catthehacker/ubuntu:act-latest
act -P ubuntu-22.04=catthehacker/ubuntu:act-22.04
act -P ubuntu-20.04=catthehacker/ubuntu:act-20.04
act -P ubuntu-latest=catthehacker/ubuntu:full-latest
act -P ubuntu-22.04=catthehacker/ubuntu:full-22.04
act -P ubuntu-latest=catthehacker/ubuntu:runner-latest
Language-Specific Images
act -P ubuntu-latest=node:20
act -P ubuntu-latest=node:20-alpine
act -P ubuntu-latest=python:3.12
act -P ubuntu-latest=python:3.12-slim
act -P ubuntu-latest=golang:1.22
act -P ubuntu-latest=golang:1.22-alpine
act -P ubuntu-latest=ruby:3.3
act -P ubuntu-latest=ruby:3.3-alpine
Platform Configuration
.actrc Configuration
Create .actrc in project root for persistent settings:
# Default platform images
-P ubuntu-latest=catthehacker/ubuntu:act-latest
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
# Reuse containers
--reuse
# Container options
--container-architecture linux/amd64
--container-daemon-socket -
# Resource limits
--container-cap-add SYS_PTRACE
--container-cap-add NET_ADMIN
Per-Workflow Configuration
Create .github/workflows/.actrc for workflow-specific settings:
-P ubuntu-latest=node:20
--env-file .env.ci
Command Line Override
act -P ubuntu-latest=python:3.12 --no-reuse
Container Management
Reusing Containers
act --reuse
act --reuse -j build
act --rm
Container Lifecycle
docker ps --filter "label=act"
docker stop $(docker ps -q --filter "label=act")
docker rm $(docker ps -aq --filter "label=act")
docker volume prune
Inspect Containers
docker exec -it act-<job-name> /bin/bash
docker logs act-<job-name>
docker inspect act-<job-name>
Volume Mounts and Binds
Default Mounts
Act automatically mounts:
- Current directory →
/github/workspace
- Act cache →
/root/.cache/act
- Docker socket (if needed)
Custom Bind Mounts
act --bind /host/path:/container/path
act --bind /data:/data --bind /config:/config
act --bind /readonly:/readonly:ro
Persistent Cache
export ACT_CACHE_DIR=$HOME/.cache/act
rm -rf $HOME/.cache/act
Docker Configuration
Docker Socket
act --container-daemon-socket -
act --container-daemon-socket /var/run/docker.sock
act --container-daemon-socket unix:///Users/$USER/.docker/run/docker.sock
Container Architecture
act --container-architecture linux/amd64
act --container-architecture linux/arm64
Network Configuration
act --network host
act --network my-network
docker network create act-network
act --network act-network
Resource Management
Memory Limits
act --memory 4g
act --memory 4g --memory-swap 8g
CPU Limits
act --cpus 2
act --cpu-shares 512
Disk Space
docker system df
docker system prune -a
find ~/.cache/act -type d -mtime +30 -exec rm -rf {} +
Security
Capabilities
act --container-cap-add SYS_PTRACE
act --container-cap-drop ALL
act --security-opt seccomp=unconfined
Privileged Mode
act --privileged
act --container-cap-add SYS_ADMIN
Multi-Platform Builds
Docker Buildx
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
Test with act:
act --use-gitignore=false \
-P ubuntu-latest=catthehacker/ubuntu:act-latest
Troubleshooting
Image Pull Failures
docker pull catthehacker/ubuntu:act-latest
act --pull=false
act --pull=true
Permission Issues
act --container-options "--user $(id -u):$(id -g)"
act --container-options "--user root"
DNS Issues
act --container-options "--dns 8.8.8.8"
act --container-options "--dns-search ."
Container Exit Codes
act --continue-on-error
act; echo $?
Performance Optimization
Image Selection
Choose the smallest image that meets your needs:
act -P ubuntu-latest=node:20-alpine
act -P ubuntu-latest=catthehacker/ubuntu:act-latest
act -P ubuntu-latest=catthehacker/ubuntu:full-latest
Layer Caching
FROM node:20
RUN apt-get update && apt-get install -y git
COPY package*.json ./
RUN npm ci
COPY . .
Parallel Jobs
act --parallel
act --parallel --jobs 2
Custom Images
Building Custom Image
Create Dockerfile:
FROM catthehacker/ubuntu:act-latest
# Add custom tools
RUN apt-get update && apt-get install -y \
postgresql-client \
redis-tools \
&& rm -rf /var/lib/apt/lists/*
# Install specific Node version
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs
# Install global npm packages
RUN npm install -g pnpm yarn
Build and use:
docker build -t my-act-runner .
act -P ubuntu-latest=my-act-runner
Publishing Custom Image
docker tag my-act-runner username/act-runner:latest
docker push username/act-runner:latest
act -P ubuntu-latest=username/act-runner:latest
Best Practices
DO
✅ Use .actrc for consistent configuration across team
✅ Choose appropriate image size for your needs
✅ Use --reuse during development
✅ Clean up Docker resources regularly
✅ Pin image versions in production workflows
✅ Use layer caching for faster builds
✅ Document image requirements in README
DON'T
❌ Use :latest tags in production
❌ Run containers in privileged mode unnecessarily
❌ Ignore Docker disk space usage
❌ Use oversized images for simple workflows
❌ Commit large images to version control
❌ Skip Docker resource cleanup
❌ Expose sensitive data in container logs
Common Patterns
Development Setup
cat > .actrc << 'EOF'
-P ubuntu-latest=catthehacker/ubuntu:act-latest
--reuse
--rm=false
--container-architecture linux/amd64
EOF
CI Validation
act --dryrun \
--pull=true \
--no-reuse \
-P ubuntu-latest=catthehacker/ubuntu:full-latest
Monorepo Setup
act -j backend -P ubuntu-latest=node:20 \
-j frontend -P ubuntu-latest=node:20-alpine \
-j database -P ubuntu-latest=postgres:16
Related Skills
- act-workflow-syntax: Creating workflow files
- act-local-testing: Testing workflows with act CLI
- act-advanced-features: Advanced act usage patterns