2017-12-27 23 views
0

SBTを使用して簡単なスカラアプリケーション(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..") } 

} 

と私は地元のランニングにsbt runすべての作品をアプリケーションを実行すると、私のapplication.confはhttp.host = "127.0.0.1" と= 9000 http.port

が含まれていますすばらしいです。

私はドッカーを試して、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とドッカーのバージョン17.09.1-ceを使用してMacで作業しています。

誰かが私を助けることができますか?

答えて

1

Macで動作しているので、ローカルVM (reference)と話すにはdocker-machine ipが必要です。

だからあなたのカールがドッキングウィンドウ・マシンを構成した後curl -X GET http://$(docker-machine ip):9000/user/34

+0

に更新する必要があり、ローカルホスト上でも動作しますが、おかげ –

+0

@albertoadamiはいいですね! – chenrui

関連する問題