2017-12-27 514 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

相關問題