1.9 KiB
1.9 KiB
Infrastructure Traps
Networking
localhosten container es el container, no el host — usarhost.docker.internal0.0.0.0bind necesario para que container sea accesible —127.0.0.1solo local al container-p 5432:5432sin IP = bind a todas interfaces = público si no hay firewall- Container restart cambia IP — usar network aliases, no IPs hardcoded
DNS
- DNS default es 127.0.0.11 interno — no usa /etc/resolv.conf del host
--dnsoverride completo — no se añade, reemplaza- DNS caching en daemon — cambios DNS externos tardan en propagarse
- Container sin network no tiene DNS — ni siquiera localhost resuelve
Volumes
- Volume anónimo (
VOLUMEen Dockerfile) acumula sin límite — nunca se borran automáticamente docker system pruneNO borra volumes — necesita--volumesexplícito- Bind mount permissions: container user vs host user — mismatch = permission denied
- NFS volumes con latencia = performance horrible — especialmente para node_modules
Storage Driver
overlay2default pero overlayfs en kernel viejo = bugs sutiles- Storage driver diferente entre dev/prod = comportamiento diferente
- Logs sin limit crecen infinito —
--log-opt max-size=10m /var/lib/dockerlleno = daemon se cuelga — monitoring esencial
Resources
- Sin
--memorylimit = container puede usar toda la RAM y triggerar OOM killer --memorysin--memory-swap= swap = 2x memory — puede ser mucho--cpus=0.5es limit, no reservation — otros containers pueden usar- Java en container sin
-XX:+UseContainerSupportno ve el límite correcto
Security
--privilegeddesactiva TODA la seguridad — casi nunca necesario--cap-addgranular mejor que privileged — solo lo que necesitas- Root en container puede ser root en host — user namespaces para evitar
- Secrets en env vars visibles con
docker inspect— usar secrets/mounts