2017-12-27 518 views
0

我使用SBT创建了一个简单的scala应用程序(akka-http REST服务)。在Mac OS Docker上运行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..") } 

} 

和我application.conf包含http.host = “127.0.0.1” 和http.port = 9000

当我运行在本地运行sbt run所有作品的应用大。

所以我决定尝试docker并为我的Akka应用程序创建一个容器。 我使用sbt DockerPlugin并运行命令sbt docker:publishDocker它在本地机器上创建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

由于您在Mac上运行,因此您需要docker-machine ip才能与本地VM (reference)交谈。

所以,你需要卷曲配置泊坞窗机后进行更新,以curl -X GET http://$(docker-machine ip):9000/user/34

+0

作品也localhost上,由于 –

+0

@albertoadami听起来不错! – chenrui

相关问题