Tbh I prefer not exposing any ports directly, and then throwing Tailscale on the network used by docker. This automatically protects everything behind a private network too.
There is bunch of software that makes this easier than trivial too, one example: https://github.com/g1ibby/auto-vpn/
I have a tailscale container, and a traefik container. Then I use labels with all my other containers to expose themselves on Traefik.
1. Have some external firewall outside of the Docker host blocking the port
2. Explicitly tell Docker to bind to the Tailscale IP only
Does it? I think it only happens if you specifically enumerate the ports. You do not need to enumerate the ports at all if you're using Tailscale as a container.