Files
ivangdavila_docker/compose.md

1.8 KiB

Compose Traps

depends_on

  • depends_on: [db] espera que CONTAINER arranque — no que servicio esté ready
  • condition: service_healthy requiere healthcheck definido — sin él, falla silenciosamente
  • Circular dependency no es error — compose intenta resolver y puede fallar random
  • depends_on no afecta docker compose run — servicios dependency no arrancan

Environment

  • .env debe estar junto a docker-compose.yml — en subdirectorio no se lee
  • ${VAR} undefined = string vacío, no error — bugs silenciosos
  • ${VAR:-default} solo aplica si VAR undefined — VAR="" usa vacío, no default
  • env_file no acepta export syntax — export VAR=x falla

Volumes

  • Volume mount sobre directorio con archivos = archivos del container desaparecen
  • Bind mount de directorio host vacío = directorio container vacío
  • ./path relativo al compose file, no al cwd
  • Named volume primera vez copia contenido del container — después no

Networks

  • Default bridge no tiene DNS entre containers — nombres no resuelven
  • Container name ≠ service name — usar service name para DNS
  • network_mode: host desactiva toda la red de compose — no solo para ese container
  • External network no se crea automáticamente — debe existir

Build

  • build: . usa Dockerfile, build: { dockerfile: X } para otro nombre
  • Build context se envía completo al daemon — directorio grande = build lento
  • image: + build: juntos = build y tag con ese nombre
  • Cache de build no se comparte entre diferentes compose projects por defecto

Healthcheck

  • Healthcheck en compose override el del Dockerfile
  • start_period no cuenta para retries — primeros N segundos ignora fallos
  • test: ["CMD", "curl", ...] — CMD usa exec, CMD-SHELL usa shell
  • Exit code 0 = healthy, 1 = unhealthy, 2 = reserved (don't use)