在Docker容器内运行SBT项目无法通过映射端口访问如何解决?
问题核心原因
- 你的服务默认绑定了容器内部的回环地址
127.0.0.1,该地址仅允许容器内部进程访问,宿主机或外部网络的请求无法到达容器内的服务。 - 你配置的端口映射
8080:5000是将宿主机8080端口的请求转发到容器的5000端口对应的公网网卡,服务没有监听该网卡的请求自然无法响应。
解决方法
- 修改服务监听地址
修改你的Scala项目服务启动配置,将绑定地址从127.0.0.1改为0.0.0.0,不同框架配置方式不同:
- Play框架:在
conf/application.conf中添加配置
play.server.http.address = "0.0.0.0"
- Akka HTTP/Http4s等自定义服务:启动服务时指定绑定地址为
0.0.0.0,示例代码如下
// 以Akka HTTP为例 Http().newServerAt("0.0.0.0", 5000).bind(route)
- 额外注意事项(可选优化)
你当前的docker-compose.yml配置了本地目录挂载到容器的/root/build路径,会覆盖Dockerfile构建阶段执行sbt compile生成的构建产物,容器启动时会重新编译项目,可能拉长启动时间,你可以根据实际需求决定是否保留该挂载配置。
修改完成后重新执行docker-compose up --build启动服务,即可通过宿主机的8080端口正常访问。
内容的提问来源于stack exchange,提问作者Maths noob
相关产品推荐
相关产品推荐

