Агент ECS, запускающий Docker-контейнер, не завершен. Ручной запуск успешен

Я следовал учебному пособию по началу работы с ECS, но агент ECS не запускает контейнер. Когда я запускаю изображение вручную в том же экземпляре, оно запускается нормально.

Изображение представляет собой веб-приложение Spring Boot с одной конечной точкой в ​​/, которое возвращает строку "Hello world!!". Контейнер нормально работает локально, а также отлично работает на экземпляре CentOS EC2, который я создал. Конечная точка доступна публично, когда я запускаю образ докера на экземпляре CentOS EC2.

Экземпляр ECS имеет группы безопасности, созданные мастером, и порт 80 открыт. Я добавил порт 22 для доступа по SSH.

Когда я SSH в экземпляр ECS, чтобы увидеть журналы Docker для моего контейнера, и это выглядит как будто он зависает во время выполнения точки входа.

Вот журналы Docker для зависшего экземпляра:

[ec2-user@ip-10-0-0-156 ~]$ docker logs --tail 100 107d4cf04dd8

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.2.RELEASE)

2016-11-25 17:36:22.505  INFO 1 --- [           main] ecstest.Application                      : Starting Application on 107d4cf04dd8 with PID 1 (/ecstest-1.0-SNAPSHOT.jar started by root in /)
2016-11-25 17:36:22.546  INFO 1 --- [           main] ecstest.Application                      : No active profile set, falling back to default profiles: default
2016-11-25 17:36:23.059  INFO 1 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6d21714c: startup date [Fri Nov 25 17:36:23 UTC 2016]; root of context hierarchy
2016-11-25 17:36:30.972  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-11-25 17:36:31.014  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-11-25 17:36:31.016  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.6
2016-11-25 17:36:31.464  INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-11-25 17:36:31.464  INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 8458 ms

Сначала это выглядит как ошибка приложения в моем образе контейнера, но когда я останавливаю процесс докера и запускаю тот же образ вручную, результат получается ожидаемым, и я могу достичь своей конечной точки за пределами экземпляра, как и ожидалось.

[ec2-user@ip-10-0-1-124 ~]$ docker stop -t 1 4d2401d7db93 && docker run -p 80:8080 -d ############.dkr.ecr.us-west-2.amazonaws.com/ecstest
4d2401d7db93
db8cffa89995401d9314d7d70e954f09c7fde972a5e6a423615827d8c47b9d10
[ec2-user@ip-10-0-1-124 ~]$ docker ps
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
db8cffa89995        ############.dkr.ecr.us-west-2.amazonaws.com/ecstest   "java -jar ecstest-1."   10 seconds ago      Up 9 seconds        0.0.0.0:80->8080/tcp   small_gates
85bd18480c99        amazon/amazon-ecs-agent:latest                         "/agent"                 11 minutes ago      Up 11 minutes                              ecs-agent
[ec2-user@ip-10-0-1-124 ~]$ docker logs --tail 1000 db8cffa89995

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.2.RELEASE)

2016-11-25 18:06:57.960  INFO 1 --- [           main] ecstest.Application                      : Starting Application on db8cffa89995 with PID 1 (/ecstest-1.0-SNAPSHOT.jar started by root in /)
2016-11-25 18:06:58.004  INFO 1 --- [           main] ecstest.Application                      : No active profile set, falling back to default profiles: default
2016-11-25 18:06:58.578  INFO 1 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6d21714c: startup date [Fri Nov 25 18:06:58 UTC 2016]; root of context hierarchy
2016-11-25 18:07:05.784  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-11-25 18:07:05.866  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-11-25 18:07:05.876  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.6
2016-11-25 18:07:06.283  INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-11-25 18:07:06.283  INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 7753 ms
2016-11-25 18:07:07.026  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2016-11-25 18:07:07.031  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-11-25 18:07:07.031  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-11-25 18:07:07.032  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-11-25 18:07:07.033  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2016-11-25 18:07:08.432  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6d21714c: startup date [Fri Nov 25 18:06:58 UTC 2016]; root of context hierarchy
2016-11-25 18:07:08.786  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[],methods=[GET]}" onto public java.lang.String ecstest.Application.get()
2016-11-25 18:07:08.800  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-11-25 18:07:08.801  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-11-25 18:07:09.036  INFO 1 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-11-25 18:07:09.036  INFO 1 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-11-25 18:07:09.204  INFO 1 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-11-25 18:07:09.893  INFO 1 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-11-25 18:07:10.201  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-11-25 18:07:10.216  INFO 1 --- [           main] ecstest.Application                      : Started Application in 14.385 seconds (JVM running for 16.522)

Есть идеи, почему агент ECS не запускает мое приложение?

Определение задачи JSON

{
  "attributes": null,
  "requiresAttributes": [
    {
      "value": null,
      "name": "com.amazonaws.ecs.capability.ecr-auth",
      "targetId": null,
      "targetType": null
    }
  ],
  "taskDefinitionArn": "arn:aws:ecs:us-west-2:############:task-definition/DcTaskDefinition:4",
  "networkMode": "bridge",
  "status": "ACTIVE",
  "revision": 4,
  "taskRoleArn": null,
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "memory": 128,
      "extraHosts": null,
      "dnsServers": null,
      "disableNetworking": null,
      "dnsSearchDomains": null,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 8080,
          "protocol": "tcp"
        }
      ],
      "hostname": null,
      "essential": true,
      "entryPoint": null,
      "mountPoints": [],
      "name": "DcContainer",
      "ulimits": null,
      "dockerSecurityOptions": null,
      "environment": [],
      "links": null,
      "workingDirectory": null,
      "readonlyRootFilesystem": null,
      "image": "############.dkr.ecr.us-west-2.amazonaws.com/ecstest:latest",
      "command": null,
      "user": null,
      "dockerLabels": null,
      "logConfiguration": null,
      "cpu": 0,
      "privileged": null,
      "memoryReservation": null
    }
  ],
  "placementConstraints": [],
  "volumes": [],
  "family": "DcTaskDefinition"
}

1 ответ

Решение

memory введите определение задачи JSON накладывает жесткое ограничение памяти на контейнер. Когда контейнер пытается превысить это ограничение, демон Docker должен его убить. Я не уверен, может ли это привести к зависанию вашего контейнера, однако это единственное важное различие, которое я вижу между тем, как работает ваш контейнер, когда его запускает ECS, и тем, как он запускается из командной строки. Итак, я бы попытался установить memory значение по крайней мере 300или используйте memoryReservation ключ вместо которого накладывает мягкий предел памяти.

Более подробную информацию о разнице между жестким и мягким пределами памяти можно найти в официальной документации ECS.

Другие вопросы по тегам