UPDATE
所以我想部署我dockerized阿卡的Http示例应用程序到Amazon弹性集装箱服务。我使用SBT泊坞窗插件以简化映像创建。
问题:当通过自动伸缩群开始了我在码头工人的应用程序工作正常,但本地没有EC2实例。出于某种原因,暴露的端口不可访问。因此,健康检查变为“不健康”和容器获取开始15秒后死亡。
我的尝试:
在http://0.0.0.0:4567/服务器在线
卷曲:(7)无法连接到本地主机端口4567:连接被拒绝
-p 4567:4567
运行端口才有效。但我跑得网络模式“主机”,我相信,端口映射不是必需的。 ECS剂容器开始(在docker ps
观察到的)过程中不使用端口映射。Http().bindAndHandle(routes, "localhost", 4567) // doesn't work locally on Mac
Http().bindAndHandle(routes, "0.0.0.0", 4567) // works locally in Docker
tongueroo/sinatra:latest
):我能卷曲它的EC2和它通过健康检查。我想不顺心的事与出口4567或斯卡拉/ Java绑定到端口。你有什么想法?
这似乎是我自己的错用Scala代码复制我从什么地方粘贴。
旧的代码不中ECS ENV工作,但无缝本地工作! :
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绑定发生后迅速退出。