马拉松命令运行docker – 组成错误

我在马拉松遇到了一个问题。 有两种情况

  1. 在Ubuntu命令界面运行docker-compose-up -d

    它成功运行和部署应用程序。

  2. 在Marathon Json文件中运行docker-compose-up -d

     { "id":"/piggy-demo-beta", "cmd":"cd /home/ubuntu/spring-demo2 && sudo docker-compose up -d ", "cpus":1, "mem":4200, "disk":0, "instances":1, "acceptedResourceRoles":[ "slave_public" ], "portDefinitions":[ { "port":10000, "protocol":"tcp", "labels":{} } ] } 

然后它不能部署和马拉松总是改变等待,延迟和跑步状态。 当我在服务器上触摸sudo ps -a时,容器似乎不断重启。

码头工人

而在Mesos中,同样的任务也完成了很多次。

Mesos接口

这是compose.yml文件。

 version: '2' services: rabbitmq: image: rabbitmq:3-management restart: always ports: - 15672:15672 logging: options: max-size: "10m" max-file: "10" config: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD image: sqshq/piggymetrics-config restart: always logging: options: max-size: "10m" max-file: "10" registry: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD image: sqshq/piggymetrics-registry restart: always ports: - 8761:8761 logging: options: max-size: "10m" max-file: "10" gateway: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD image: sqshq/piggymetrics-gateway restart: always ports: - 80:4000 logging: options: max-size: "10m" max-file: "10" auth-service: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD NOTIFICATION_SERVICE_PASSWORD: $NOTIFICATION_SERVICE_PASSWORD STATISTICS_SERVICE_PASSWORD: $STATISTICS_SERVICE_PASSWORD ACCOUNT_SERVICE_PASSWORD: $ACCOUNT_SERVICE_PASSWORD MONGODB_PASSWORD: $MONGODB_PASSWORD image: sqshq/piggymetrics-auth-service restart: always logging: options: max-size: "10m" max-file: "10" auth-mongodb: environment: MONGODB_PASSWORD: $MONGODB_PASSWORD image: sqshq/piggymetrics-mongodb restart: always logging: options: max-size: "10m" max-file: "10" account-service: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD ACCOUNT_SERVICE_PASSWORD: $ACCOUNT_SERVICE_PASSWORD MONGODB_PASSWORD: $MONGODB_PASSWORD image: sqshq/piggymetrics-account-service restart: always logging: options: max-size: "10m" max-file: "10" account-mongodb: environment: INIT_DUMP: account-service-dump.js MONGODB_PASSWORD: $MONGODB_PASSWORD image: sqshq/piggymetrics-mongodb restart: always logging: options: max-size: "10m" max-file: "10" statistics-service: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD MONGODB_PASSWORD: $MONGODB_PASSWORD STATISTICS_SERVICE_PASSWORD: $STATISTICS_SERVICE_PASSWORD image: sqshq/piggymetrics-statistics-service restart: always logging: options: max-size: "10m" max-file: "10" statistics-mongodb: environment: MONGODB_PASSWORD: $MONGODB_PASSWORD image: sqshq/piggymetrics-mongodb restart: always logging: options: max-size: "10m" max-file: "10" notification-service: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD MONGODB_PASSWORD: $MONGODB_PASSWORD NOTIFICATION_SERVICE_PASSWORD: $NOTIFICATION_SERVICE_PASSWORD image: sqshq/piggymetrics-notification-service restart: always logging: options: max-size: "10m" max-file: "10" notification-mongodb: image: sqshq/piggymetrics-mongodb restart: always environment: MONGODB_PASSWORD: $MONGODB_PASSWORD logging: options: max-size: "10m" max-file: "10" monitoring: environment: CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD image: sqshq/piggymetrics-monitoring restart: always ports: - 9000:8080 - 8989:8989 logging: options: max-size: "10m" max-file: "10" 

要运行由Docker撰写的Marathon应用程序组,您应该将您的每个服务都转换成Marathons应用程序。 每个来自compose.yaml的提交都有相同的Marathon应用程序。

示例让我们假设我们想运行一个叫做piggy大型应用程序,它是由许多小型服务构build而成的。 一项服务被定义为

  rabbitmq: image: rabbitmq:3-management restart: always ports: - 15672:15672 logging: options: max-size: "10m" max-file: "10" 

会导致

 { "id":"piggy/rabbitmq", "container":{ "docker":{ "image":"rabbitmq:3-management", "network":"BRIDGE", "portMappings":[{ "containerPort":8761, "hostPort":0 }], "parameters":[ { "key":"max-size", "value":"10," }, { "key":"max-file", "value":"10" } ] }, "type":"DOCKER" }, "cpus":1.0, "mem":512.0, "instances":1 } 

这个过程需要为compose.yaml中定义的每个服务重复。 准备好的JSON应该是POST /v2/apps或者组合在一起的Marathon组 。

如果仔细观察,可以发现这不是1对1翻译。 在compose.yaml中没有定义资源cpus / mem。 端口映射的另一个区别。 在Mesos上运行服务时,不应静态分配端口。 这就是为什么主机端口设置为0,所以随机端口将被分配。 另一个重要的是健康检查。 您应该为您的应用程序定义健康检查。 最后是卷。 在Mesos上运行服务时,如果文件仍然存在,则应调查持久性卷 。