我有一个非常基本的Akka-http应用程序,它基本上不仅仅是一个Hello-world设置 - 我已经定义了一个端点,只是将它绑定到“localhost”和端口“8080”:
object Main extends App with Routes {
private implicit val system = ActorSystem()
protected implicit val executor: ExecutionContext = system.dispatcher
protected implicit val materializer: ActorMaterializer = ActorMaterializer()
protected val log: LoggingAdapter = Logging( system, getClass )
log.info( "starting server" )
Http().bindAndHandle( logRequestResult("log",Logging.InfoLevel)( allRoutes ), "localhost", 8080 )
log.info( "server started, awaiting requests.." )
}
(allRoutes混合在via Routes中,但只是一个虚拟端点,将一个简单的case类序列化为JSON响应)
如果我使用sbt启动它,那么端点工作正常(例如http://localhost:8080/colour/red)。
我现在正尝试将其打包到Docker容器中运行它 - 我已阅读http://yeghishe.github.io/2015/06/24/running-akka-applications.html之类的内容并添加了sbt-native-package插件(http://www.scala-sbt.org/sbt-native-packager/formats/docker.html#customize)。
现在我运行sbt docker:publishLocal
我可以看到已经创建了泊坞窗图像:
REPOSITORY TAG IMAGE ID CREATED SIZE
sample-rest-api 0.0.1 3c6ee44985b4 9 hours ago 714.4 MB
如果我现在启动我的图像,请按如下方式映射8080端口:
docker run -p 8080:8080 sample-rest-api:0.0.1
我看到我通常在启动时看到的日志输出,所以它看起来已经开始正常,但是,如果我然后尝试访问与之前相同的URL我现在得到响应
“加载页面时出错:连接已重置”
如果我检查docker ps
我看到图像正在运行,并且端口按预期映射:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27848729a425 sample-rest-api:0.0.1 "bin/sample-rest-api" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp furious_heisenberg
我在Ubuntu 16.04上运行 - 任何人都有任何想法?
答案 0 :(得分:15)
尝试将'localhost'更改为0.0.0.0 在http.bindAndHandle
中