Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Akka Http web app无法通过亚马逊ECS的健康检查_Scala_Docker_Amazon Ecs_Akka Http_Docker Networking - Fatal编程技术网

Scala Akka Http web app无法通过亚马逊ECS的健康检查

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)无法连接到本地主机

更新

我自己回答 所以我尝试将我的停靠Akka Http示例应用程序部署到Amazon弹性容器服务中。我使用sbt Docker插件来简化图像创建

问题:docker中的我的应用程序在本地运行良好,但在自动缩放组启动时在EC2实例中无法运行。由于某些原因,无法访问暴露端口。因此,运行状况检查变得“不健康”,容器在启动后15秒内被杀死

我的尝试:

  • CloudWatch日志包含正常启动日志:
  • 服务器在线

  • 我访问了EC2实例,并在代理启动容器时尝试将其卷曲。结果是:
  • curl:(7)无法连接到本地主机端口4567:连接被拒绝

  • 我在EC2中手动运行docker容器。端口仅在使用
    -p 4567:4567
    运行时工作。但是我运行网络模式“主机”,并且我认为不需要端口映射。ECS代理在容器启动期间不使用端口映射(可在
    docker ps
    中看到)

  • 我尝试部署两个主机地址绑定:

    Http().bindAndHandle(路由,“localhost”,4567)//在Mac上无法在本地工作

    Http().bindandhold(routes,“0.0.0.0”,4567)//在Docker中本地工作

  • 我用另一张docker图像进行了对比测试,它运行得非常好(
    tongueroo/sinatra:latest
    ):我能够在EC2中卷曲它,并且通过了健康检查

  • 在我看来,ECS代理没有显示任何有用的东西

  • 我猜EXPORT 4567或scala/java绑定到端口时出错了。你有什么想法?

    希望你没事

    您是否将任务定义配置为绑定端口?这非常重要,因为如果你不公开应用程序端口,你就什么都做不了


    然后,如果要执行从计算机到容器的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很快退出。

    我欣然接受,但这纯粹是我的编程错误。