docker-local-dev
Skill68 starsChanged 7 months agoApache-2.0View on GitHub
Create or repair local Docker Compose services, Dockerfiles, mounts, networking, and readiness checks. Use when container configuration is the deliverable; ordinary container commands and production deployment are separate concerns.
In this repository16 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- agents-md-generatorSkill
- brainstorm-firstSkill
- debugging-workflowSkill
- design-system-generatorSkill
- documentation-guidelinesSkill
- laravel-11-12-app-guidelinesSkill
- laravel-13-app-guidelinesSkill
- office-web-ui-systemSkill
- performance-optimizationSkill
- project-development-mindsetSkill
- run-reviewable-subtask-loopSkill
- testing-verificationSkill
- ui-ux-concept-implementationSkill
- vps-docker-traefik-deploySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. About 0 are common, 13 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
Run in the main conversation by default.
- Distinctive: line 18
Prefer direct foreground commands and one concern per service.
- Very specific: line 19
Prefer a stable top-level Compose name: and role-based service names.
- Distinctive: line 22
Keep secrets out of committed files, generated documentation, command output, and frontend or proxy containers.
- Very specific: line 28
Run project commands from the target project directory.
- Distinctive: line 43
Use stack detection when it adds useful evidence.
- Distinctive: line 51
When Docker is available, optionally inspect local images and networks:
- Distinctive: line 58
Do not let cached images or a detected network override project compatibility or isolation requirements.
- Distinctive: line 84
Use assets as starting points, not immutable output.
- Distinctive: line 101
Run migrations, seeds, CMS installers, destructive cleanup, or database write tests only when authorization covers their data effects.
- Distinctive: line 105
Run static checks first:
- Very specific: line 112
Use docker build --check only when the installed Docker version supports it.
- Very specific: line 120
If --wait is unavailable, start detached and poll declared healthchecks with a bounded timeout.
- Distinctive: line 122
Run the bundled checks when applicable:
- Distinctive: line 142
Never include secret values in the report.
- Distinctive: line 159
Treat registered ports as reserved even when no process is currently listening.
- Distinctive: line 170
No secrets, production data, private domains, or unauthorized mutations appear in generated files or reports.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Docker Local Development
Delegation
Run in the main conversation by default. Delegation can increase usage: obtain explicit approval for the proposed agent count and scope before using subagents. Reuse that approval within its bounds; ask again before expanding the approved count or scope.
Guardrails
- Design for local development. Keep production images, secrets, deployment, certificates, and runtime topology separate.
- Inspect before asking questions or proposing services. Treat detection as evidence, not authority.
- Preserve existing Docker files and unrelated working-tree changes. Keep a semantic diff for material stack changes. Ordinary configuration edits are covered by a setup or repair request; volume deletion, destructive resets, and data migrations need authorization covering those effects.
- Generate only services the project uses or the user explicitly requests. A database is not mandatory when the project uses SQLite, a host service, or an external database.
- Prefer direct foreground commands and one concern per service. Add Supervisor or PM2 only when the project already requires it or production-parity testing justifies it.
- Prefer a stable top-level Compose
name:and role-based service names. Do not setcontainer_nameby default because it prevents service scaling and creates cross-project collisions. - Select images by project constraints, team or production compatibility, trusted publisher, supported version, and architecture. Treat an already-downloaded image only as a tie-breaker. Avoid floating
latesttags in generated files. - Publish only ports needed by the host. Bind local-only ports to
127.0.0.1by default; keep databases, caches, SMTP, PHP-FPM, and internal APIs unexposed when possible. - Keep secrets out of committed files, generated documentation, command output, and frontend or proxy containers. Generate an ignored local env file plus a safe example when configuration is needed.
Workflow
1. Inspect the project
Run project commands from the target project directory. Resolve bundled helpers through <skill-directory>/scripts/; their location is separate from the project working directory. Check Docker and Compose capabilities before selecting syntax:
docker version
docker compose versionInspect, when present:
compose.yaml,compose.yml,docker-compose*.yml, and override filesDockerfile*,.dockerignore,.devcontainer/, Makefiles, and package scripts- application manifests, lockfiles, runtime-version files, env examples, and monorepo/workspace files
- existing local proxy conventions, Compose project names, networks, volumes, and host port mappings
- Git status and repository instructions before editing tracked files
Use stack detection when it adds useful evidence; direct inspection is enough for a known, narrow repair. Resolve the script from this skill directory:
"<skill-directory>/scripts/detect-stack.sh" "<project-root>"The script emits JSON on stdout and diagnostics on stderr. Confirm uncertain findings from source files without printing secret values.
When Docker is available, optionally inspect local images and networks:
"<skill-directory>/scripts/detect-images.sh"
"<skill-directory>/scripts/detect-network.sh"Do not let cached images or a detected network override project compatibility or isolation requirements.
2. Resolve the design
Infer and summarize:
- apps in scope, dev commands, internal ports, shared packages, and live-reload needs
- runtime and package-manager versions from constraints and lockfiles
- database, cache, queue, scheduler, mail, and debugging services actually used
- existing reverse proxy, explicit
.localhosthostnames, same-origin/apirouting, and required host exposure - bind mounts versus Compose Watch; use Watch only when supported by the installed Compose version
- merge versus focused repair versus replacement of existing Docker files
Resolve ordinary setup choices from evidence. Ask only when missing information changes the apps in scope, data compatibility, network exposure, or a material replacement not already requested.
3. Load only relevant references
| Need | Read |
| Detection rules and monorepo discovery | references/tech-stack-detection.md |
| Images, processes, dependencies, mounts, environment, Dockerfiles | references/service-configuration-guide.md |
| WordPress, Drupal, or Joomla | references/cms-configuration-guide.md |
| Ports, proxies, domains, networks, host access | references/networking-ports-guide.md |
| Existing Compose or Dockerfile changes | references/merge-backup-strategy.md |
| Readiness checks and smoke tests | references/health-check-patterns.md |
Use assets as starting points, not immutable output. Remove unselected services and adapt placeholders, healthchecks, commands, paths, users, and versions to the detected project.
4. Preview and generate
For a material change to an existing stack, state what will change — files, services and versions, host ports and domains, mount strategy — as part of doing it.
Generate the smallest coherent setup within the existing authorization. Depending on the project that is a dev Dockerfile or build target, .dockerignore, compose.yaml without the obsolete top-level version, the selected proxy or process configuration, and, when configuration is needed, an env example plus an ignored local env file. Add usage notes only when useful or requested.
Prefer:
- bind-mounted source with named dependency volumes for straightforward active development
- Compose Watch with
sync,sync+restart, orrebuildrules for large trees, native dependencies, or projects that benefit from granular sync - one-shot dependency installers only when they solve a real bind-mount or monorepo problem; mark them as expected to exit successfully
- separate worker and scheduler services using the same image as the app
- Compose profiles for optional debugging and administration tools
- health-gated dependencies only when the dependency defines a valid healthcheck
Run migrations, seeds, CMS installers, destructive cleanup, or database write tests only when authorization covers their data effects. A request to configure containers alone does not imply those actions.
5. Verify
Run static checks first:
docker compose config --quiet
docker build --check .Use docker build --check only when the installed Docker version supports it. Build and start when the request includes running or verifying the local setup. For file-generation-only requests, keep execution within that narrower scope:
docker compose build
docker compose up -d --wait
docker compose ps -aIf --wait is unavailable, start detached and poll declared healthchecks with a bounded timeout. Inspect logs for failed or restarting services.
Run the bundled checks when applicable:
"<skill-directory>/scripts/health-check.sh"
"<skill-directory>/scripts/db-test.sh" # connection/read-only query
"<skill-directory>/scripts/db-test.sh" --crud # explicit temporary-table CRUD checkAlso run a stack-specific smoke check such as php artisan about, wp core version, drush status, python manage.py check, or the application's health endpoint. When runtime verification is in scope, verify hot reload with a harmless temporary edit and restore it afterward. Reuse passing checks unless relevant configuration or runtime conditions change.
6. Report
Report:
- generated or modified files
- selected services, versions, local URLs, and explicit host exposure
- exact verification commands and results
- expected stopped one-shot services
- assumptions, skipped checks, and platform-specific limitations
Never include secret values in the report.
Host Port Registry
Persistent host-port tracking is optional. First check:
PORT_REGISTRY_FILE="${DOCKER_LOCAL_DEV_PORT_REGISTRY:-${XDG_STATE_HOME:-$HOME/.local/state}/docker-local-dev/HOST_PORT_REGISTRY.md}"
test -f "$PORT_REGISTRY_FILE" && sed -n '1,220p' "$PORT_REGISTRY_FILE"Creating or refreshing a registry scans beyond the current project and records local paths. Establish authorization for the scan root and output path; reuse it if already given. Then run:
node "<skill-directory>/scripts/scan-host-ports.mjs" --root "<approved-root>" --out "$PORT_REGISTRY_FILE" --yesTreat registered ports as reserved even when no process is currently listening. For a single project without a registry, a live port check is sufficient.
Acceptance Criteria
- Generated Compose configuration parses without unresolved placeholders.
- Selected images and commands match project constraints and contain no unreviewed floating tags.
- App containers reach dependencies by Compose service name, not
localhost. - Optional services are absent or profile-gated.
- Host ports are minimal, conflict-free, and loopback-bound unless broader access was requested.
- Healthchecks invoke commands available in their images and test readiness rather than process presence alone.
- Source changes reload as intended; lockfile changes follow the documented install or rebuild path.
- No secrets, production data, private domains, or unauthorized mutations appear in generated files or reports.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

