I reproduced this on 1.3.0-RC5 to 1.3.0 and current 1.4.0-SNAPSHOT.
Create a docker app with no port mappings:


or in json mode:

{
"id": "emptyports",
"cmd": null,
"cpus": 1,
"mem": 128,
"disk": 0,
"instances": 1,
"container": {
"docker": {
"image": "nginx",
"network": "HOST"
},
"type": "DOCKER"
}
}
Observe portMappings: null

Now, when I click Edit:

Exception:
Uncaught (in promise) TypeError: Cannot read property 'map' of null(…)i @ main.js:formatted:51623dockerPortMappings @ main.js:formatted:51650(anonymous function) @ main.js:formatted:51075(anonymous function) @ main.js:formatted:51073h @ main.js:formatted:51070populateFieldsFromAppDefinition @ main.js:formatted:51302AppConfigEditFormComponent_getInitialState @ main.js:formatted:50600AppConfigEditFormComponent @ main.js:formatted:7707mountComponent @ main.js:formatted:9555ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountChildren @ main.js:formatted:10141_createContentMarkup @ main.js:formatted:9987mountComponent @ main.js:formatted:9950mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountChildren @ main.js:formatted:10141_createContentMarkup @ main.js:formatted:9987mountComponent @ main.js:formatted:9950mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountChildren @ main.js:formatted:10141_createContentMarkup @ main.js:formatted:9987mountComponent @ main.js:formatted:9950mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountChildren @ main.js:formatted:10141_createContentMarkup @ main.js:formatted:9987mountComponent @ main.js:formatted:9950mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountChildren @ main.js:formatted:10141_createContentMarkup @ main.js:formatted:9987mountComponent @ main.js:formatted:9950mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountChildren @ main.js:formatted:10141_createContentMarkup @ main.js:formatted:9987mountComponent @ main.js:formatted:9950mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075mountComponent @ main.js:formatted:9585ReactCompositeComponent_mountComponent @ main.js:formatted:7047mountComponent @ main.js:formatted:7075_updateRenderedComponent @ main.js:formatted:9754_performComponentUpdate @ main.js:formatted:9739updateComponent @ main.js:formatted:9706ReactCompositeComponent_updateComponent @ main.js:formatted:7047performUpdateIfNecessary @ main.js:formatted:9684performUpdateIfNecessary @ main.js:formatted:7095s @ main.js:formatted:6880perform @ main.js:formatted:7418perform @ main.js:formatted:7418perform @ main.js:formatted:6939T @ main.js:formatted:6947ReactUpdates_flushBatchedUpdates @ main.js:formatted:7047closeAll @ main.js:formatted:7454perform @ main.js:formatted:7427batchedUpdates @ main.js:formatted:11325l @ main.js:formatted:6889r @ main.js:formatted:6752enqueueSetState @ main.js:formatted:6796r.setState @ main.js:formatted:6714onRequestAppVersion @ main.js:formatted:69646n.emit @ main.js:formatted:17636(anonymous function) @ main.js:formatted:30613e._invokeCallback @ main.js:formatted:17814e.dispatch @ main.js:formatted:17802(anonymous function) @ main.js:formatted:29862(anonymous function) @ main.js:formatted:19599(anonymous function) @ main.js:formatted:19574
This could be looked at as a marathon-ui issue probably rather than marathon - however there is no github issues enabled for the marathon-ui project as far as I can see.
I see that https://github.com/mesosphere/marathon-ui/commit/b32fa61cb127c8e5a6652d8f14608659bbb26bb0 commit actually fixes this - now I just need to find a way to repackage that into my marathon somehow.
Is there a way i can incorporate the change into my marathon?
This is what I did, it's pretty arduous, as marathon deploys as a fat jar:
TL;DR
I rebuilt the marathon-ui project, packaged up as a jar, published it to local maven repo with new version number 1.2.1 and added it as a dependency to the sbt.build for marathon, on which then I ran sbt assembly and voila, the new marathon jar is there, which I just copied over to my masters repointed the systemd service file and done :)
Details from the top of my head (I might be missing something)
I. Rebuilding the marathon-ui project:
I.a.) The npm build:
I.b) the maven build: install maven
II . install the jar locally to the maven repo
III. rebuild marathon
IV. deploy marathon jar
Note: I guess you could unzip the jars manually too and make the change there - but the problem is the npm run dist will create one big main.js which will be hard to edit.
This appears to be a dup of https://github.com/mesosphere/marathon/issues/4340, but an update on version(s) in which the fix will appear would be helpful... Cheers!
The #4340 fix is included in Marathon UI v1.1.5 which is shipped with Marathon v1.3.2.
Most helpful comment
I see that https://github.com/mesosphere/marathon-ui/commit/b32fa61cb127c8e5a6652d8f14608659bbb26bb0 commit actually fixes this - now I just need to find a way to repackage that into my marathon somehow.