Error iptables failed: No chain/target/match by that name en Docker
El error iptables failed: iptables --wait -t nat -A DOCKER ... No chain/target/match by that name se produce cuando el cortafuegos del sistema (UFW, Firewalld o iptables) se reinicia o recarga mientras el daemon de Docker está activo, eliminando las cadenas nativas DOCKER y DOCKER-USER de la tabla NAT.
El error iptables failed: iptables --wait -t nat -A DOCKER ... No chain/target/match by that name se produce cuando el cortafuegos del sistema (UFW, Firewalld o iptables) se reinicia o recarga mientras el daemon de Docker está activo, eliminando las cadenas nativas DOCKER y DOCKER-USER de la tabla NAT.
Al intentar mapear puertos de red en un nuevo contenedor (-p 8080:80), Docker falla porque no encuentra la infraestructura de enrutamiento necesaria.
El Diagnóstico Rápido
sudo systemctl restart docker)iptables-legacy o un backend coherentesudo modprobe ip_tables && sudo modprobe iptable_natLa Solución Paso a Paso
Reinicia el servicio de Docker para regenerar las cadenas La solución inmediata y más común es forzar a Docker a reconstruir sus reglas en la tabla de filtrado de paquetes:
sudo systemctl restart docker
Una vez reiniciado, prueba iniciar tu stack de contenedores:
docker compose up -d
Configura el orden de inicio entre UFW y Docker
Si usas Ubuntu/Debian con UFW, asegúrate de que UFW cargue antes que Docker. En caso de reiniciar UFW con sudo ufw reload, acostúmbrate a encadenar el reinicio de Docker:
sudo ufw reload && sudo systemctl restart docker
Verifica la compatibilidad con nftables
En distribuciones modernas (Debian 12+, Arch Linux, RHEL 9), el sistema operativo utiliza nftables por defecto. Si Docker intenta comunicarse con iptables-legacy, se producirán desajustes. Comprueba la alternativa activa:
sudo update-alternatives --config iptables
Selecciona la opción recomendada para tu distribución (usualmente iptables-nft en sistemas actuales).
Carga los módulos de red de Linux Si estás en un VPS o contenedor Proxmox (LXC), es posible que los módulos NAT del kernel no se hayan cargado automáticamente:
sudo modprobe ip_tables
sudo modprobe iptable_nat
sudo modprobe iptable_filter
Consejo de Prevención
Prácticas de seguridad recomendadas:
- Uso de la cadena DOCKER-USER: Nunca agregues reglas de firewall personalizadas directamente a la cadena
DOCKER. Añádelas a la cadenaDOCKER-USERpara que no se borren en cada reinicio. - Configuración de daemon.json: Puedes deshabilitar la manipulación automática de iptables en Docker (
"iptables": falseen/etc/docker/daemon.json) si prefieres gestionar el enrutamiento manualmente con Nginx Proxy Manager o Traefik.