I’m not sure why it’s picking a port that’s already in use, but it looks like something related to your system. For me, the Metro bundlers are all started on 19001, but I’m not sure if that’s just me or intended behavior.
However, if you really need to start separate processes, including Metro, you might be better off to contain them in docker containers. It’s not super hard, and they are fully isolated from each other.
You can do that by running this docker command (using this image):
$ docker run -ti \
-w /code \
-v $PWD:/code \
-v /code/.expo \
bycedric/expo-cli:3 start --tunnel
-w defines the working directory in the container. The
-v $PWD defines the volume to mount from host to the container (this is where your code is ported to the container; it should update on every change). You also need to avoid the
.expo folder being shared as it contains information about the processes (which we want to isolate), that’s happening in
-v /code/.expo (it creates a new volume over the existing one). And finally, you can start Expo in tunnel mode to avoid having to worry about all port forwarding and limitations.
I hope this helps a bit!