marathon 앱의 포트를 지정할 때. 

servicePort는 앱에서 외부로 노출될 서비스 port를 의미한다. 
servicePort: When you create a new application in Marathon (either through the REST API or the front end), you may assign one or more service ports to it. You can specify all valid port numbers as service ports or you can use 0 to indicate that Marathon should allocate free service ports to the app automatically

containerPort는 컨테이너에서 앱이 실행중인 포트를 지정한다.즉 load balancer와 앱 간에 연결되고 있는 port를 의미한다.  이 포트로 health check가 일어난다. 

containerPort: A container port specifies a port within a container. This is only necessary as part of a port mapping when using BRIDGE or USER mode networking with a Docker container.

아래 예를 보면, 외부에서 8080포트로 접근할 수 있고, LB와 마라톤 앱간에는 18080으로 통신한다라는 뜻이다. 

"container": {

    "type": "DOCKER",

    "volumes": [],

    "docker": {

      "image": "imageurl",

      "network": "BRIDGE",

      "portMappings": [


          "containerPort": 8080,

          "hostPort": 0,

          "servicePort": 18080,

          "protocol": "tcp",

          "name": "8080",

          "labels": {}



      "privileged": false,

      "parameters": [],

      "forcePullImage": true



Posted by 김용환 '김용환'