Ah and to answer your last question.
Traefik auto discovers first exposed port. In most cases it's fine, but it's not always what you want.
If you want to get sure, just use a service. (see my first reply)
Excellent - thanks for the speedy answers!! I just tested:
I confirm traefik.port does not work in traefik v2 but the line posted by @igromanru does work!
With just one port exposed (via a 'port' enty in my v3 compose file), it does not work without the the port label - so the auto-detection does not appear to work.
Only other way I can think of is to use EXPOSE in the Dockerfile - but I'm using a third party image so that's not an option (I don't want to rebuild from a base image).