Docker compose generator
Skill Notysoty/openagentskills/skills/docker-compose-generator
A community-driven library of reusable AI agent skills for Claude Code, Cursor, Codex, Cline, and more.
npx -y skills add Notysoty/openagentskills --skill docker-compose-generatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generates production-ready docker-compose.yml files for any application stack.
SKILL.md
5.5 KB, as published. Nobody here has run it
Docker Compose Generator
What this skill does
This skill directs the agent to gather information about your application stack and produce a production-ready docker-compose.yml file. It includes health checks, named volumes, custom networks, environment variable placeholders, restart policies, and sensible resource limits — all things that are easy to miss when writing a Compose file from scratch.
Use this when bootstrapping a new project, when converting an existing app to run in containers, or when you want a solid starting point to customize from.
How to use
Claude Code / Cline
Copy this file to .agents/skills/docker-compose-generator/SKILL.md in your project root.
Then ask:
- "Use the Docker Compose Generator skill to create a docker-compose.yml for my Node.js app with PostgreSQL and Redis."
- "I have a Python FastAPI backend, a React frontend, and a Postgres database. Use the Docker Compose Generator skill."
The agent will ask clarifying questions before generating the file if your description is incomplete.
Cursor / Codex
Paste the instructions from the section below into your session along with a description of your stack.
The Prompt / Instructions for the Agent
When asked to generate a docker-compose.yml, follow these steps:
-
Gather requirements. If not already provided, ask for:
- The application services (e.g., web server, worker, frontend build)
- The data stores (PostgreSQL, MySQL, MongoDB, Redis, etc.) and their versions
- The runtime environment (Node.js, Python, Go, etc.) and version
- Whether this is for development or production (they differ significantly)
- Any custom ports, domains, or volume paths
-
Apply these rules to every service:
- Always set a
restartpolicy (unless-stoppedfor production,on-failurefor dev) - Add a
healthcheckfor every database or cache service - Use named volumes (not bind mounts) for persistent data in production
- Use a custom named network — do not rely on the default bridge network
- Put secrets and credentials in environment variables with
${VAR_NAME}placeholders, never hardcoded values - Set
depends_onwithcondition: service_healthyfor services that require a healthy DB before starting
- Always set a
-
For development configs, also:
- Add bind-mount source code for hot reloading (e.g.,
./src:/app/src) - Expose debug ports (e.g.,
9229for Node.js inspector) - Add a
.env.examplereminder comment
- Add bind-mount source code for hot reloading (e.g.,
-
For production configs, also:
- Add
deploy.resources.limitsfor memory and CPU - Do not expose database ports to the host unless explicitly requested
- Use
read_only: trueon containers where the filesystem does not need to be writable
- Add
-
Output:
- The
docker-compose.ymlin a fenced code block - A
.env.examplesnippet showing all required variables - A brief "Next steps" section (e.g., how to start, how to view logs)
- The
Example
Input to Agent:
"Use the Docker Compose Generator skill. I have a Node.js Express API (port 3000), a PostgreSQL 16 database, and a Redis 7 cache. This is for production."
Output from Agent:
# docker-compose.yml
version: '3.9'
services:
api:
build: .
restart: unless-stopped
ports:
- "3000:3000"
environment:
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
- NODE_ENV=production
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
networks:
- app-network
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- app-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- redis-data:/data
networks:
- app-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres-data:
redis-data:
networks:
app-network:
driver: bridge
.env.example
DATABASE_URL=postgresql://user:password@postgres:5432/myapp
REDIS_URL=redis://redis:6379
POSTGRES_DB=myapp
POSTGRES_USER=user
POSTGRES_PASSWORD=changeme
Next steps
- Copy
.env.exampleto.envand fill in real values docker compose up -dto start all servicesdocker compose logs -f apito tail API logs
Notes
- The generated file is a starting point — review resource limits and port exposure before deploying.
- The skill does not write a
Dockerfilefor your application image. It assumes yourDockerfilealready exists in the project root, or will ask you to create one. - For multi-environment setups, consider generating separate
docker-compose.override.ymlfiles for dev and staging. Ask the agent to do this explicitly. - Always rotate any credentials in
.env.examplebefore using them in a real environment.