.claude/skills/infrastructure/docker-entrypoint/SKILL.md
Padrão para criar entrypoint.sh com múltiplos comandos para containers Docker, permitindo execução flexível de diferentes operações.
npx skillsauth add LucasBiason/engineering-knowledge-base docker-entrypoint-patternInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Padrão para criar entrypoint.sh com múltiplos comandos, permitindo execução flexível de diferentes operações em containers Docker.
Aplicar esta skill quando:
exec "$@" garante que o processo principal receba SIGTERM corretamente# Copiar entrypoint
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Usar como entrypoint
ENTRYPOINT ["/entrypoint.sh"]
CMD ["runserver"] # Comando padrão
Uso:
# Executar comando padrão
docker run myapp
# Executar comando específico
docker run myapp test
docker run myapp migrate
docker run myapp dev
#!/usr/bin/env bash
# Exit immediately if a command exits with a non-zero status
# Treat unset variables as errors
# Fail on pipeline errors
set -euo pipefail
# Function to display CLI help
cli_help() {
local cli_name=${0##*/}
echo "
$cli_name
[Project Name] - Entrypoint CLI
Usage: $cli_name [command]
Commands:
dev Start development server
prod Start production server
test Run tests with coverage
migrate Apply database migrations
health Check service health
* Display this help message
Environment Variables:
PORT Server port (default: 8000)
WORKERS Number of workers (default: 4)
LOG_LEVEL Logging level (default: info)
"
exit 1
}
# Main command handler
case "${1:-help}" in
dev)
# Development server
;;
prod|runserver)
# Production server
;;
test)
# Run tests
;;
migrate)
# Run migrations
;;
health)
# Health check
;;
*)
cli_help
;;
esac
Sempre usar set -euo pipefail:
set -e: Para ao primeiro erroset -u: Erro se variável não definidaset -o pipefail: Falha se qualquer comando em pipeline falharSempre usar exec "$@" no final:
Sempre tornar executável:
RUN chmod +x /entrypoint.sh
Sempre usar formato exec no ENTRYPOINT:
ENTRYPOINT ["/entrypoint.sh"] # ✅ Correto
# NÃO usar: ENTRYPOINT /entrypoint.sh # ❌ Errado
Sempre validar variáveis críticas:
if [ -z "${SECRET_KEY:-}" ]; then
echo "ERROR: SECRET_KEY not set"
exit 1
fi
Referência: core/templates/entrypoint/django-entrypoint.sh
Comandos típicos:
migrate - Aplicar migrationstest - Executar testesdev - Django runserverprod - Gunicorncollectstatic - Coletar arquivos estáticosReferência: core/templates/entrypoint/fastapi-entrypoint.sh
Comandos típicos:
migrate - Alembic upgrade headtest - Executar testesdev - Uvicorn com reloadprod - Uvicorn multi-workerhealth - Health checkReferência: core/templates/entrypoint/nodejs-entrypoint.sh
Comandos típicos:
test - Executar testesdev - Nodemon ou ts-node-devprod - Node dist/index.jsseed - Executar seed scriptshealth - Health checkReferência: core/templates/entrypoint/react-entrypoint.sh
Comandos típicos:
dev - Vite/Next.js dev serverbuild - Build de produçãoprod - Servir build estático (nginx)test - Executar testeswait_for_service() {
local host=$1
local port=$2
local service=$3
echo "⏳ Waiting for $service at $host:$port..."
until nc -z "$host" "$port"; do
echo "$service is unavailable - sleeping"
sleep 2
done
echo "✅ $service is ready!"
}
# Aguardar dependências antes de iniciar
wait_for_service db 5432 "PostgreSQL"
wait_for_service redis 6379 "Redis"
# Validar variáveis críticas
REQUIRED_VARS=("DATABASE_URL" "SECRET_KEY")
for var in "${REQUIRED_VARS[@]}"; do
if [ -z "${!var:-}" ]; then
echo "ERROR: $var not set"
exit 1
fi
done
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
log "Starting application..."
log "Port: ${PORT:-8000}"
log "Environment: ${ENVIRONMENT:-development}"
health)
# Verificar dependências
check_database || exit 1
check_redis || exit 1
echo "✅ All services healthy"
exit 0
;;
# Rodar migrations apenas se necessário
if [ "${RUN_MIGRATIONS:-false}" = "true" ]; then
echo "📦 Running migrations..."
alembic upgrade head
fi
# Coletar estáticos apenas em produção
if [ "${ENVIRONMENT:-development}" = "production" ]; then
echo "📁 Collecting static files..."
python manage.py collectstatic --noinput
fi
FROM python:3.11-slim AS base
WORKDIR /app
# Instalar dependências
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copiar código
COPY . .
# Copiar entrypoint
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Expor porta
EXPOSE 8000
# Entrypoint e CMD
ENTRYPOINT ["/entrypoint.sh"]
CMD ["prod"] # Comando padrão
services:
backend:
build: .
entrypoint: ["/entrypoint.sh"]
command: ["dev"] # Override CMD
environment:
- PORT=8000
- RUN_MIGRATIONS=true
set -euo pipefail no iníciocli_help() implementadaexec "$@" usado no final de cada comandocore/templates/entrypoint/core/templates/django/entrypoint.shcore/docs/programming/devops.md (seção entrypoint)exec "$@" para sinais UnixÚltima Atualização: 2026-01-21
testing
Execução e análise de testes automatizados
development
Gera resumos didáticos extensos e estruturados de aulas/cursos para cards do Notion. Use ao resumir aulas, apostilas, transcrições ou materiais de estudo para incluir no corpo do card (não apenas no campo Descrição), com flashcards, exemplos de código, diagramas Mermaid, mapa conceitual e perguntas de reforço.
development
Padroniza documentação existente no formato canônico Spec-Driven. Remove duplicação e melhora rastreabilidade.
development
Processo universal e repetível para criar especificações a partir de qualquer input (texto, docs, código). Usado em Plan mode.