With Tomcat or Glassfish, there is no problem with deploying multiple apps on port 8080. But if you try to do a grails run-app on multiple apps (without specifying different ports) at the same time, you will receive a JVM Bind Exception.
Why is grails run-app different from deploying a .WAR to a container?
I’m no grails expert, but Tomcat and Glassfish are one process/application bound to one port. Then they host different applications (web/enterprise) running in the same VM, and route requests using the context root for example.
I suspect grails
run-appstarts a new application as a new process/in a new JVM instance and tries to bind it to the port. If there’s already a binding, that won’t work.