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

时间:2017-12-27 14:04:40

标签: macos docker sbt akka-http

我使用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..")   }

 }

我的application.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 个答案:

答案 0 :(得分:1)

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

因此,您的卷曲需要更新为curl -X GET http://$(docker-machine ip):9000/user/34