| name | docker-env-manager |
| description | Use this skill whenever the user wants to pull, run, build, compose, list, prune, manage, or otherwise handle Docker containers, images, volumes, networks, or Docker Compose projects, or when a NeuroClaw skill (e.g. wmh-segmentation, freesurfer-processor in container mode) requires a clean, isolated, GPU-enabled Docker environment (e.g. 'pull mars-wmh image', 'run container with GPU', 'docker compose up', 'prune unused images', 'build custom dockerfile', 'manage nvidia docker'). Triggers include: 'docker run', 'docker pull', 'docker compose', 'docker build', 'docker env', 'manage container', 'nvidia docker', 'pull image', 'docker prune', 'containerize'. This skill is the **mandatory gatekeeper for all Docker operations** in NeuroClaw: it ALWAYS plans first, shows commands + risks + best practices, and waits for explicit user confirmation before executing anything. All actual Docker execution is routed through `claw-shell`. |
| license | MIT License (NeuroClaw custom skill – freely modifiable within the project) |
| layer | subagent |
| skill_type | tool |
| dependencies | ["claw-shell","dependency-planner"] |
Docker Environment Manager (Tool Layer)
Overview
Docker is the backbone for reproducible, containerized, GPU-accelerated environments in NeuroClaw — especially for deep-learning and neuroimaging skills (MARS-WMH nnU-Net, future nnU-Net models, containerized FreeSurfer, etc.) that require exact runtime isolation, NVIDIA GPU passthrough, and large pre-built images.
This skill acts as the interface-layer orchestrator for all common Docker operations, preventing permission issues, GPU misconfiguration, port conflicts, and storage bloat while enforcing best practices (named containers, volume mounts, --gpus all, docker-compose for multi-service stacks, dry-run previews, and safe pruning).
Strict workflow (never skipped):
- Parse user intent from the request or context (pull / run / build / compose / prune / list / cleanup).
- Detect current Docker setup (
docker --version, docker info, NVIDIA Container Toolkit via nvidia-smi through claw-shell, available disk space, GPU status).
- Propose a safe, best-practice plan:
- Always prefer named containers/volumes over anonymous ones
- Suggest
--gpus all + volume mounts for NeuroClaw GPU skills
- Recommend
docker-compose.yml for reproducible multi-container stacks
- Use
--dry-run equivalents and plan preview by default
- Warn about large image pulls (several GB), permission issues (
chmod -R 777 on data dirs), and GPU driver mismatches
- Route all actual
docker run/pull/build commands through claw-shell
- Show numbered plan + exact commands + estimated time/size + risks.
- Wait for explicit user confirmation (“YES”, “execute”, “proceed”).
- On approval: delegate execution safely to
claw-shell (with logging), capture output, report success/failure, and suggest next steps.
Core safety & best-practice rules
- Never run destructive commands (
docker system prune -a, docker rm -f) without double confirmation
- All shell-level Docker commands must go through
claw-shell (centralized logging + safety gate)
- Prefer
docker compose over legacy docker-compose
- Integrate with
dependency-planner for installing Docker + NVIDIA Container Toolkit
- Log all actions to
./logs/docker_YYYYMMDD_HHMMSS.log
Quick Reference (Common NeuroClaw Tasks)
| Task | Recommended Approach (after user confirmation) |
|---|
| Pull latest model image | docker pull ghcr.io/miac-research/wmh-nnunet:latest (then tag) |
| Run GPU container with data mount | docker run --rm --gpus all -v $(pwd)/data:/data image ... |
| Docker Compose stack | docker compose -f docker-compose.yml up -d |
| Build custom Dockerfile | docker build -t neuroclaw-custom . |
| List containers / images | docker ps -a / docker images |
| Safe cleanup of unused resources | docker system prune --dry-run → confirm → execute via claw-shell |
| Fix common permission issues | chmod -R 777 output_dir (auto-included in plans) |
| GPU check & NVIDIA Toolkit install | Hand over to dependency-planner if nvidia-smi fails |
Installation
This skill is pure Python orchestration — no external binaries needed beyond a working Docker installation.
Required prerequisites (must exist before activation):
- Working Docker Engine (with NVIDIA Container Toolkit for GPU skills)
claw-shell (mandatory — all Docker commands are routed here)
dependency-planner (recommended companion for installing Docker + NVIDIA Container Toolkit)
- Basic shell access
To register in NeuroClaw:
NeuroClaw recommended wrapper script
import subprocess
import argparse
import sys
from pathlib import Path
from datetime import datetime
def run_docker_cmd(cmd, dry_run=False):
full_cmd = ["docker"] + cmd
print("Would run (via claw-shell):", " ".join(full_cmd))
def get_docker_info():
try:
version = subprocess.check_output(["docker", "--version"]).decode().strip()
info = subprocess.check_output(["docker", "info", "--format", "{{.ServerVersion}}"]).decode().strip()
return f"Docker {version} | Engine {info}"
except:
return "Docker not found or error."
def check_gpu():
try:
return subprocess.check_output(["nvidia-smi", "--query-gpu=name", "--format=csv,noheader"]).decode().strip()
except:
return "No NVIDIA GPU detected or NVIDIA Container Toolkit missing"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="NeuroClaw Docker Environment Manager")
parser.add_argument("--request", required=True, help="User request (pull/run/compose/prune...)")
parser.add_argument("--dry-run", action="store_true", help="Only show plan")
args = parser.parse_args()
Harness-Aware Container Isolation & Security Standards
All Docker operations performed via docker-env-manager must enforce strict isolation, security boundaries, and reproducibility standards.
Container Specification Format (Declarative Registry)
Each containerized skill must include a Docker specification manifest:
File: skills/{skill_name}/docker-spec.json
{
"skill_name": "wmh-segmentation",
"container_name": "neuroclaw-wmh-seg",
"image": "ghcr.io/miac-research/wmh-nnunet:latest",
"image_hash": "sha256:abc123...",
"container_security": {
"read_only_root": true,
"cap_drop": ["ALL"],
"cap_add": ["NET_BIND_SERVICE"],
"security_opts": ["no-new-privileges:true"],
"user": "1000:1000",
"privileged": false
},
"resource_limits": {
"memory_limit": "16G",
"memory_swap": "16G",
"cpus": "4",
"pids_limit": 512,
"ulimits": {
"nofile": 1024,
"nproc": 512
}
},
"network_config": {
"network": "bridge",
"expose_ports": [],
"environment_whitelist": [
"CUDA_VISIBLE_DEVICES",
"TORCH_HOME"
]
},
"volume_mounts": {
"/data": {
"bind": "{data_path}",
"mode": "ro",
"required": true
},
"/output": {
"bind": "{output_path}",
"mode": "rw",
"required": true
},
"/tmp": {
"bind": "/dev/shm",
"mode": "rw",
"size_limit": "8G"
}
},
"gpu_config": {
"enabled": true,
"device_ids": "all",
"driver_capabilities": "compute,utility"
},
"logging": {
"driver": "json-file",
"options": {
"max-size": "10m",
"max-file": "3"
}
}
}
Container Execution Protocol
Step 1: Pre-execution container validation
docker inspect ${image_hash} --format='{{.RepoDigests}}'
trivy image --severity HIGH,CRITICAL ${image}
nvidia-smi -L
docker stats --no-stream ${existing_container_name} || true
Step 2: Secure container creation
Template (auto-generated based on docker-spec.json):
docker run \
--name ${CONTAINER_NAME} \
--rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges:true \
--user 1000:1000 \
--memory=${MEMORY_LIMIT} \
--memory-swap=${MEMORY_LIMIT} \
--cpus=${CPU_LIMIT} \
--pids-limit=512 \
--gpus=all \
--env CUDA_VISIBLE_DEVICES=${GPU_DEVICES} \
-v ${DATA_PATH}:/data:ro \
-v ${OUTPUT_PATH}:/output:rw \
-v /dev/shm:/tmp:rw \
--log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
--network=bridge \
${IMAGE} \
${COMMAND}
Step 3: Post-execution audit logging
{
"execution_time": "2026-04-05T14:32:00Z",
"container_id": "abc123def456",
"image": "ghcr.io/miac-research/wmh-nnunet:latest",
"command": "python inference.py --input /data --output /output",
"exit_code": 0,
"resource_usage": {
"memory_peak_mb": 8192,
"cpu_time_seconds": 1203.5,
"gpu_memory_peak_mb": 6144,
"io_read_bytes": 5368709120,
"io_write_bytes": 2684354560
},
"security_events": [],
"status": "SUCCESS"
}
Data Privacy & Isolation Guardrails
Mandatory privacy checks before container execution:
-
Input data anonymization verification:
- Scan for known PII patterns (patient IDs, medical record numbers, names, birthdates)
- Flag any unredacted identifiable information
- Hash-verify input against reference dataset (prevent contamination)
-
Output post-processing:
- Scan generated files for embedded PII or metadata
- Automatically redact timestamps, user paths from logs
- Generate sanitized output copies for sharing
-
Filesystem sandboxing audit:
- Verify no mounts point to system directories (/, /etc, /root, /home)
- Enforce read-only root filesystem
- Whitelist environment variables (drop all except approved list)
Generated audit report (container_privacy_audit.json):
{
"container": "wmh-seg-20260405",
"privacy_scan": {
"input_files_scanned": 50,
"pii_detected": 0,
"output_files_sanitized": 50,
"suspicious_environment_vars": 0,
"mount_violations": 0,
"status": "CLEARED"
},
"isolation_verification": {
"readonly_root": true,
"privilege_dropping": true,
"network_isolation": true,
"capability_dropping": true
}
}
Container Reproducibility & Layer Verification
Image integrity checking (SHA256 verification at run time):
EXPECTED_DIGEST="sha256:abc123..."
docker pull ${IMAGE}
ACTUAL_DIGEST=$(docker inspect ${IMAGE} --format='{{index .RepoDigests 0}}' | cut -d'@' -f2)
if [ "$EXPECTED_DIGEST" != "$ACTUAL_DIGEST" ]; then
echo "ERROR: Image digest mismatch. Potential supply chain attack."
exit 1
fi
Layer-by-layer audit trail (container_layer_manifest.json):
{
"image": "ghcr.io/miac-research/wmh-nnunet:latest",
"total_layers": 12,
"base_image": "nvidia/cuda:12.1-cudnn8-runtime-ubuntu22.04",
"layers": [
{
"layer_index": 0,
"digest_sha256": "def456...",
"size_bytes": 1234567,
"instruction": "FROM nvidia/cuda:12.1-cudnn8-runtime-ubuntu22.04"
},
{
"layer_index": 1,
"digest_sha256": "ghi789...",
"size_bytes": 567890,
"instruction": "RUN apt-get update && apt-get install -y python3-dev..."
}
],
"final_image_hash": "sha256:abc123...",
"verification_timestamp": "2026-04-05T14:20:00Z"
}
Checkpoint & Resume with Container State
Long-running containerized tasks support state persistence:
docker checkpoint create ${CONTAINER_ID} checkpoint_20260405_143000
docker checkpoint ls ${CONTAINER_ID}
docker start --checkpoint checkpoint_20260405_143000 ${CONTAINER_ID}
Important Notes & Limitations
- User confirmation is mandatory — no silent destructive actions
- All actual Docker commands are delegated to
claw-shell for centralized logging and safety
- Large image pulls (e.g. nnU-Net models) → warn about size/time and disk space
- Common fixes (
chmod -R 777 on mounted directories, newgrp docker) are automatically included in plans
- Windows users are encouraged to use WSL2 + Docker Desktop for best compatibility
- GPU passthrough requires NVIDIA Container Toolkit (installed via
dependency-planner)
- Rollback support: keep
docker-compose.yml + image tags as backups
When to Call This Skill
- Any request containing “docker”, “container”, “pull image”, “run with GPU”, “docker compose”, “prune”, “build Dockerfile”
- Before running Docker-based skills (wmh-segmentation, future containerized models)
- When
dependency-planner detects missing Docker/NVIDIA toolkit
- Reproducibility, sharing, or team collaboration tasks involving containers
Complementary / Related Skills
claw-shell → mandatory safe execution of all Docker commands (tmux claw session)
dependency-planner → install Docker Engine + NVIDIA Container Toolkit
multi-search-engine → lookup latest Docker Hub / GitHub Container Registry instructions
Reference
Custom interface-layer skill for NeuroClaw, addressing containerized environment setup gaps identified in the MedicalClaw / OpenClaw evaluation and aligned with 2026 Docker + NVIDIA best practices (GPU passthrough, compose reproducibility, claw-shell routing).
Created At: 2026-03-25 23:08 HKT
Last Updated At: 2026-04-05 02:01 HKT
Author: chengwang96