Why use EXPOSE in Dockerfile -- since you can bind to all ports anyways
Docker's EXPOSE documentation addresses this specific point:


  The EXPOSE instruction does not actually publish the port. It
  functions as a type of documentation between the person who builds the
  image and the person who runs the container, about which ports are
  intended to be published. To actually publish the port when running
  the container, use the -p flag on docker run to publish and map
  one or more ports, or the -P flag to publish all exposed ports and
  map them to high-order ports.


Pay attention to the last sentence, if you expose multiple ports then -P becomes useful to avoid setting multiple -p on the command line.