【问题标题】:ECS Service other than HTTP keeps restartingHTTP以外的ECS服务不断重启
【发布时间】:2017-06-27 22:54:25
【问题描述】:

我通过 AWS ECS 安装了 Nginx ECS Docker 容器服务,运行没有任何问题。但是,通过 AWS ECS 安装的所有其他容器服务(例如 centos、ubuntu、mongodb 或 postgres)都会循环重启(取消注册、重新注册或处于挂起状态)。有没有办法在 AMI Optimized Linux 上使用 AWS ECS 安装这些容器服务而不会出现任何问题?另外,有没有办法在 AWS ECS 中注册从 Docker Hub 手动拉取并运行的 Docker 容器?

【问题讨论】:

    标签: docker containers amazon-elb amazon-ecs


    【解决方案1】:

    通常,如果容器一遍又一遍地重新启动,是因为它没有通过您设置的健康检查。例如,MongoDB 不使用 HTTP 协议,因此如果您在 ECS 中将其设置为带有 HTTP 健康检查的服务,它将无法通过健康检查,并且会因未能通过健康检查而被 ECS 杀死。

    我的建议是在不使用健康检查的情况下启动此类服务,无论是作为独立任务,还是使用您自己的健康检查机制。

    如果您尝试运行的服务确实有一个 HTTP 接口并且它仍然没有通过运行状况检查并且它被杀死,那么您应该进行一些调试以验证该实例是否具有正确的安全组规则来接受来自的流量负载均衡器。此外,您应该验证您在任务定义中定义的端口与运行状况检查的端口是否匹配。

    【讨论】:

    • 非常感谢您的回复。我在 AWS ECS 中看不到任何不使用运行状况检查来启动服务的选项。我在没有使用 ALB 的情况下为 centos 创建了任务定义和服务,但仍然无法正常工作。如何使用 AWS ECS 在同一个 ec2 实例中运行多个容器,例如 centos、mongodb、postgres、ubuntu?我尝试为每个容器创建单独的任务定义和服务,并为每个容器映射端口,例如 Centos 的端口 0 到 5002,mongoDB 的端口 0 到 28017 和 postgresql 的端口 0 到 5432,但无论如何都不起作用。再次感谢。
    • 健康检查是服务负载平衡的一部分。创建服务时,负载平衡是可选的。您可以在没有负载均衡器的情况下创建服务。只需将其配置为绑定到静态端口,然后使用您自己的机制将流量发送到容器的端口。这允许您使用其 TCP 协议直接连接到数据库容器。
    • 非常感谢。除了 Web 服务之外,我从健康检查中排除了所有服务,并且它有效。我想知道在我使用 Docker CLI 手动拉取并运行 Docker 映像和容器后,是否可以自动更新 AWS ECS,而不是通过 ECS 部署所有内容。
    • 抱歉@AlwaysALearner 延迟响应,但您可以使用 ECS 的 Docker Compose 集成部署到 ECS 或从 Docker 命令行更新 ECS 中正在运行的容器,而无需通过 ECS:docs.docker.com/cloud/ecs-integration
    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多