当 运行 REST 应用程序在 docker 上使用 Mac OS 时为空响应
Empty response when running REST application on docker with Mac OS
我使用 SBT 创建了一个简单的 Scala 应用程序(akka-http REST 服务)。
这是主应用程序class:
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
当我 运行 本地应用程序 运行ning sbt run
一切正常。
所以我决定尝试 docker 并为我的 Akka 应用程序创建一个容器。
我正在使用 sbt DockerPlugin 和 运行ning 命令 sbt docker:publishDocker 它在本地 machine.
上创建 docker 图像
所以我使用命令
启动了 docker 容器
docker run -p 9000:9000 --name user-api user-api:0.1.0-SNAPSHOT
我可以看到容器是正确的运行ning。
如果我使用以下命令检查 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。
有人可以帮助我吗?
由于您在 Mac 上 运行,您需要 docker-machine ip
才能与本地 VM (reference) 对话。
因此您的 curl 需要更新为 curl -X GET http://$(docker-machine ip):9000/user/34
我使用 SBT 创建了一个简单的 Scala 应用程序(akka-http REST 服务)。
这是主应用程序class:
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
当我 运行 本地应用程序 运行ning sbt run
一切正常。
所以我决定尝试 docker 并为我的 Akka 应用程序创建一个容器。 我正在使用 sbt DockerPlugin 和 运行ning 命令 sbt docker:publishDocker 它在本地 machine.
上创建 docker 图像所以我使用命令
启动了 docker 容器docker run -p 9000:9000 --name user-api user-api:0.1.0-SNAPSHOT
我可以看到容器是正确的运行ning。
如果我使用以下命令检查 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。
有人可以帮助我吗?
由于您在 Mac 上 运行,您需要 docker-machine ip
才能与本地 VM (reference) 对话。
因此您的 curl 需要更新为 curl -X GET http://$(docker-machine ip):9000/user/34