Scala Akka Http web app无法通过亚马逊ECS的健康检查
更新 我自己回答 所以我尝试将我的停靠Akka Http示例应用程序部署到Amazon弹性容器服务中。我使用sbt Docker插件来简化图像创建 问题:docker中的我的应用程序在本地运行良好,但在自动缩放组启动时在EC2实例中无法运行。由于某些原因,无法访问暴露端口。因此,运行状况检查变得“不健康”,容器在启动后15秒内被杀死 我的尝试:Scala Akka Http web app无法通过亚马逊ECS的健康检查,scala,docker,amazon-ecs,akka-http,docker-networking,Scala,Docker,Amazon Ecs,Akka Http,Docker Networking,更新 我自己回答 所以我尝试将我的停靠Akka Http示例应用程序部署到Amazon弹性容器服务中。我使用sbt Docker插件来简化图像创建 问题:docker中的我的应用程序在本地运行良好,但在自动缩放组启动时在EC2实例中无法运行。由于某些原因,无法访问暴露端口。因此,运行状况检查变得“不健康”,容器在启动后15秒内被杀死 我的尝试: CloudWatch日志包含正常启动日志: 服务器在线 我访问了EC2实例,并在代理启动容器时尝试将其卷曲。结果是: curl:(7)无法连接到本地主机
-p 4567:4567
运行时工作。但是我运行网络模式“主机”,并且我认为不需要端口映射。ECS代理在容器启动期间不使用端口映射(可在docker ps
中看到)Http().bindAndHandle(路由,“localhost”,4567)//在Mac上无法在本地工作
Http().bindandhold(routes,“0.0.0.0”,4567)//在Docker中本地工作
tongueroo/sinatra:latest
):我能够在EC2中卷曲它,并且通过了健康检查然后,如果要执行从计算机到容器的HTTP请求,则需要使用服务发现。AWS现在为您提供通过53号公路发现的服务。但是你可以使用concur和Fabio。我从某处复制粘贴的Scala代码似乎是我自己的错 旧代码在ECS环境中不工作,但在本地无缝工作!:
val serverBinding: Future[Http.ServerBinding] = Http().bindAndHandle(routes, "0.0.0.0", 4567)
serverBinding.onComplete {
case Success(bound) =>
println(s"Server online at http://${bound.localAddress.getHostString}:${bound.localAddress.getPort}/")
StdIn.readLine() // let it run until user presses return
serverBinding
.flatMap(_.unbind()) // trigger unbinding from the port
.onComplete(_ => system.terminate()) // and shutdown when done
case Failure(e) =>
Console.err.println(s"Server could not start!")
e.printStackTrace()
system.terminate()
}
有效的新固定代码:
val serverBinding: Future[Http.ServerBinding] = Http().bindAndHandle(routes, "0.0.0.0", 4567)
serverBinding.onComplete {
case Success(bound) =>
println(s"Server online at http://${bound.localAddress.getHostString}:${bound.localAddress.getPort}/ v8")
case Failure(e) =>
Console.err.println(s"Server could not start!")
e.printStackTrace()
system.terminate()
println("Waiting for termination...")
Await.result(system.whenTerminated, Duration.Inf)
println("TERMINATED")
没有阻塞操作,绑定发生后JVM很快退出。我欣然接受,但这纯粹是我的编程错误。