Docker Actions¶
Docker actions provide container operations for extracting files from Docker images.
Configuration¶
[[actions]]
name = "action-name"
type = "docker"
command = "extract" # Only extract is currently implemented
image = "image:tag" # Required
# Command-specific fields below
Commands¶
extract¶
Extract files from a Docker container image.
Status: ✅ Implemented
Required Fields:
image(string): Docker image name (tag can be separate or in formatimage:tag)source(pathlib.Path): Path inside container to extract fromdestination(ResourceUrl): Local path to extract to (typicallyextracted:///)
Optional Fields:
tag(string): Image tag (default:latest) - only used if image doesn't contain:tag
Example:
[[actions]]
name = "extract-python-libs"
type = "docker"
command = "extract"
image = "python"
tag = "3.12-slim"
source = "/usr/local/lib/python3.12/"
destination = "extracted:///python-libs/"
Behavior:
- Pulls the image if not available locally (
docker pull) - Creates temporary container from image (
docker create) - Copies files from container to local filesystem (
docker cp) - Stores in
extracted:///directory (resolves to{working_directory}/extracted/) - Automatically cleans up container (
docker rm)
build¶
Status: ❌ Not yet implemented (raises NotImplementedError)
Build a Docker image from a Dockerfile.
Required Fields:
image: Image name to createpath: Path to Dockerfile directory (ResourceUrl)
Optional Fields:
tag: Image tag (default:latest)
pull¶
Status: ❌ Not yet implemented (raises NotImplementedError)
Pull a Docker image from registry.
Required Fields:
image: Image name to pull
Optional Fields:
tag: Image tag (default:latest)
push¶
Status: ❌ Not yet implemented (raises NotImplementedError)
Push a Docker image to registry.
Required Fields:
image: Image name to push
Optional Fields:
tag: Image tag (default:latest)
Common Use Cases¶
Extract Configuration Files¶
[[actions]]
name = "extract-nginx-config"
type = "docker"
command = "extract"
image = "nginx"
tag = "latest"
source = "/etc/nginx/"
destination = "extracted:///nginx-config/"
[[actions]]
name = "copy-to-repo"
type = "file"
command = "copy"
source = "extracted:///nginx-config/nginx.conf"
destination = "repository:///config/nginx.conf"
Extract Python Packages¶
[[actions]]
name = "extract-site-packages"
type = "docker"
command = "extract"
image = "myapp"
tag = "latest"
source = "/usr/local/lib/python3.12/site-packages/"
destination = "extracted:///packages/"
Extract Multiple Directories¶
[[actions]]
name = "extract-app-dir"
type = "docker"
command = "extract"
image = "myapp"
tag = "latest"
source = "/app/"
destination = "extracted:///app/"
[[actions]]
name = "extract-config-dir"
type = "docker"
command = "extract"
image = "myapp"
tag = "latest"
source = "/etc/myapp/"
destination = "extracted:///config/"
Implementation Notes¶
Extract Command¶
- Requires Docker daemon running locally
- Uses
dockerCLI commands (pull,create,cp,rm) - Temporary containers automatically cleaned up after extraction
- Extracted files preserve permissions from container
- Container name format:
imbi-extract-{id} - Pulls image automatically if not available locally
- Image names support Jinja2 templating:
image = "{{ project_name }}"
Not Implemented Commands¶
The following commands are defined but not yet implemented:
- build: Would build Docker images from Dockerfiles
- pull: Would pull images from registry (extract does this automatically)
- push: Would push images to registry
Attempting to use these commands will raise NotImplementedError.
Error Handling¶
- Docker command failures raise
RuntimeErrorwith exit code and output - Missing Docker CLI raises helpful error: "Docker command not found - is Docker installed and in PATH?"
- Container cleanup failures are logged but don't fail the action
- Image pull failures propagate as RuntimeError
Integration with Other Actions¶
Docker Extract + File Copy Pattern¶
# Extract from container
[[actions]]
name = "extract-config"
type = "docker"
command = "extract"
image = "nginx"
tag = "alpine"
source = "/etc/nginx/nginx.conf"
destination = "extracted:///nginx.conf"
# Copy to repository
[[actions]]
name = "use-extracted-config"
type = "file"
command = "copy"
source = "extracted:///nginx.conf"
destination = "repository:///config/nginx.conf"
Docker Extract + Claude Analysis¶
# Extract application code
[[actions]]
name = "extract-app-code"
type = "docker"
command = "extract"
image = "production-app"
tag = "latest"
source = "/app/src/"
destination = "extracted:///prod-code/"
# Analyze with Claude
[[actions]]
name = "analyze-differences"
type = "claude"
prompt = "prompts/analyze-prod-vs-repo.md"
# Prompt can reference both extracted:///prod-code/ and repository:///