An expose does nothing by itself. It is merley a hint and used by docker run -P (expose all port) or by managent UIs to provide the port mappings duing an assisted creation of the container. Even though it will map all container ports to the host, I am not sure wether it maps them 1:1 or assigns a random host port to each container port.
You don’t have to declare ‘EXPOSE’ for a port to be able to map it. Map whatever container port you want - it is not even required that a process actualy is listening on the container port - as long as the host side port is not occupied by another process. Though, if you want to keep it clean you better start a process that listens on a port and provide a hint about its existance using a EXPOSE declartion.