启动Docker容器的ECS Agent未完成。 手动启动成功

我遵循ECS入门教程,但ECS代理没有启动容器。 当我在同一个实例上手动启动图像时,它会正常启动。

该图像是一个Spring Boot Web应用程序,其中一个端点位于/上,返回string“Hello world !!”。 容器在本地运行良好,并且在我创build的CentOS EC2实例上运行良好。 当我在CentOS EC2实例上运行Docker镜像时,端点是公开的。

ECS实例具有由向导创build的安全组,并已打开端口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] sbcetTomcatEmbeddedServletContainer : 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] oaccC[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2016-11-25 17:36:31.464 INFO 1 --- [ost-startStop-1] osweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 8458 ms 

起初,它似乎是我的容器图像中的应用程序错误,但是当我停止docker进程并手动运行相同的图像时,输出如预期的那样,并且可以按照预期从实例外部到达我的端点。

 [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] sbcetTomcatEmbeddedServletContainer : 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] oaccC[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2016-11-25 18:07:06.283 INFO 1 --- [ost-startStop-1] osweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 7753 ms 2016-11-25 18:07:07.026 INFO 1 --- [ost-startStop-1] osbwservlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2016-11-25 18:07:07.031 INFO 1 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2016-11-25 18:07:07.031 INFO 1 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2016-11-25 18:07:07.032 INFO 1 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2016-11-25 18:07:07.033 INFO 1 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2016-11-25 18:07:08.432 INFO 1 --- [ main] swsmmaRequestMappingHandlerAdapter : 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] swsmmaRequestMappingHandlerMapping : Mapped "{[],methods=[GET]}" onto public java.lang.String ecstest.Application.get() 2016-11-25 18:07:08.800 INFO 1 --- [ main] swsmmaRequestMappingHandlerMapping : 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] swsmmaRequestMappingHandlerMapping : 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] oswshandler.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] oswshandler.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] oswshandler.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] osjeaAnnotationMBeanExporter : Registering beans for JMX exposure on startup 2016-11-25 18:07:10.201 INFO 1 --- [ main] sbcetTomcatEmbeddedServletContainer : 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" } 

任务定义JSON中的memory密钥对容器施加了硬内存限制 。 当一个容器试图超过这个限制时,Docker守护进程应该杀死它。 我不确定这是否会导致您的容器“卡住”,但这是我看到ECS运行时的容器运行方式与命令行运行方式之间唯一的重要区别。 所以,我会尝试将memory值设置为至less300 ,或使用memoryReservation键,而不是强制内存限制。

有关硬性和软性内存限制之间的区别的更多信息可以在ECS官方文档中find 。