Holy shit, I've been running open ports for a year with docker, completely ignoring my firewall!
This has to be fixed ASAP.
It'll be slow at first, and you'll need new rules each time you bring a container up but you'll have far more control.
We switched to this approach when we had an IP dual-stack issue with the proxy and not only do we know it's secure because we wrote the rules, we get better performance without the userland proxy and more control over routing.
It's important to understand that because your containers sit on a bridged network, INPUT rules do nothing to stop incoming connections, it's all about the FORWARD table.
Edit: apparently there is a sysctl setting that makes the bridge netfilter code call the iptables filter routines (bridge-nf-call-iptables) so i am kinda wrong...