代码之家  ›  专栏  ›  技术社区  ›  alberto adami

使用Mac OS在docker上运行REST应用程序时响应为空

  •  0
  • alberto adami  · 技术社区  · 7 年前

    我已经使用SBT创建了一个简单的scala应用程序(akka http REST服务)。

    这是应用程序主类:

     object UserApiWebService extends App {
    
       override def main(args: Array[String]): Unit = {
    
         implicit val system: ActorSystem = ActorSystem("user-api-system")
         implicit val executionContext: ExecutionContext = system.dispatcher
         implicit val materializer: ActorMaterializer = ActorMaterializer()
    
         val userApiRoute = new UserApiRoute
         val userApiRoutes = new UserApiRoutes(userApiRoute)
    
    
         val config = ConfigFactory.load()
         val host = config.getString("http.host")
         val port = config.getInt("http.port")
    
         println(s"Starting server on $host:$port..")
         Http().bindAndHandle(userApiRoutes.routes, host, port)
         println(s"Server started on $host:$port..")   }
    
     }
    

    还有我的申请。conf包含 http.host =“127.0.0.1”和 http.port = 9000

    当我在本地运行应用程序时 sbt run 一切都很好。

    所以我决定尝试docker并为我的Akka应用程序创建一个容器。 我正在使用sbt DockerPlugin并运行命令sbt docker:publishDocker它在本地计算机上创建docker映像。

    因此,我使用以下命令启动了docker容器

    docker run -p 9000:9000 --name user-api user-api:0.1.0-SNAPSHOT
    

    我可以看到容器运行正常。

    如果我使用以下命令检查API-REST应用程序是否正常工作:

    curl -XGET 127.0.0.1:9000/user/34
    

    我明白了 curl: (52) Empty reply from server 作为回应。

    如果在输入容器后使用 docker exec -it a556b8846340 /bin/bash 我得到了正确的回答。

    我正在使用macOS 10.12.6和docker版本17.09.1-ce开发mac。

    有人能帮我吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   chenrui ravi ranjan    7 年前

    由于您正在Mac上运行,因此需要 docker-machine ip 与本地VM对话 (reference) .

    所以你的卷曲需要更新到 curl -X GET http://$(docker-machine ip):9000/user/34