在Mac OS上的Docker上运行REST应用程序时的空响应

我已经使用SBT创build了一个简单的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应用程序创build一个容器。 我使用sbt DockerPlugin并运行命令sbt docker:publishDocker它在本地机器上创builddocker镜像。

所以我使用这个命令启动了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作为回应的curl: (52) Empty reply from server

如果我在使用docker exec -it a556b8846340 /bin/bash进入容器后尝试相同的命令,我会得到正确的响应。

我正在使用macOS 10.12.6和docker版本17.09.1-ce在Mac上工作。

任何人都可以帮助我?

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

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