Devcontainer Diagnostic
Diagnose devcontainer and Docker development environment problems. Help create reproducible, fast-starting development environments that work consistently across VS Code, GitHub Codespaces, and team members.
When to Use This Skill
Use this skill when:
Setting up a new devcontainer Container startup is too slow Configuration errors or conflicts Different behavior in VS Code vs Codespaces Multi-service development environment needed
Do NOT use this skill when:
Writing application code Deploying to production Configuring CI/CD pipelines Core Principle
Development containers should provide instant productivity. Every configuration choice affects startup time, reproducibility, and team onboarding. Make these trade-offs explicit.
Diagnostic States DV0: No Devcontainer Strategy
Symptoms: Manual setup, "check the README", works on one machine fails on others
Interventions:
Start with pre-built devcontainer base image Use assets/devcontainer-simple.md template DV1: Slow Container Startup
Symptoms: 5+ minute startup, heavy postCreateCommand, avoiding rebuilds
Key Questions:
How long does startup actually take? What's in postCreateCommand? Are you using prebuilds?
Interventions:
Move npm install/pip install to Dockerfile (cached) Use mcr.microsoft.com/devcontainers/* base images Configure prebuilds for team repos Run scripts/analyze-devcontainer.ts DV2: Configuration Problems
Symptoms: JSON errors, VS Code won't connect, features conflicting
Checklist:
devcontainer.json passes JSON validation Using only ONE of: image, build.dockerfile, dockerComposeFile Features are compatible and ordered correctly Extensions use correct publisher.extension-name format DV3: Environment Parity Issues
Symptoms: Works in VS Code, fails in Codespaces (or vice versa)
Common Issues:
Issue Local VS Code Codespaces Docker socket Usually available Docker-in-Docker needed Secrets .env files work Use Codespaces secrets File watching Native May need polling DV4: Multi-Service Complexity
Symptoms: Need database/cache/queue, services can't communicate
Interventions:
Use Docker Compose integration Named volumes for persistence Health checks for service readiness Use assets/devcontainer-compose.md template DV5: Dockerfile Issues
Symptoms: Build failures, huge images, no caching
Best Practices:
FROM mcr.microsoft.com/devcontainers/base:ubuntu
Dependencies first (cached)
RUN apt-get update && apt-get install -y \ build-essential && rm -rf /var/lib/apt/lists/*
Copy deps then install (cached if deps unchanged)
COPY package*.json ./ RUN npm install
Code last (changes frequently)
COPY . .
DV6: Devcontainer Validated
Indicators:
Startup under 2 minutes Works in VS Code and Codespaces New developers productive in 30 minutes Available Scripts Script Purpose Usage analyze-devcontainer.ts Find issues and optimizations deno run --allow-read scripts/analyze-devcontainer.ts validate-dockerfile.ts Check Dockerfile best practices deno run --allow-read scripts/validate-dockerfile.ts scan-image.ts Vulnerability scanning (wraps Trivy) deno run --allow-run scripts/scan-image.ts [image] Anti-Patterns The Kitchen Sink
Installing every tool "just in case" - 10+ minute startups. Fix: Start minimal. Add only when needed.
The postCreateCommand Overload
Everything in postCreateCommand - runs every time. Fix: Move stable operations to Dockerfile.
The Snowflake Container
Manual changes inside running containers. Fix: ALL changes go in config files.
Templates assets/devcontainer-simple.md - Basic single-container setup assets/devcontainer-dockerfile.md - Custom Dockerfile approach assets/devcontainer-compose.md - Multi-service setup Related Skills system-design - Multi-service architecture informs Compose config pwa-development - Consistent environment for PWA toolchain