Spring & Docker:访问localhost提示未发送任何数据如何解决
问题根因
Spring Boot应用默认监听端口为8080,你的Docker配置中指定暴露9090端口、并将本地80端口映射到容器9090端口,但应用本身没有修改监听端口配置,导致容器内没有服务响应9090端口的请求,因此访问时提示站点未返回数据。
解决方案(任选其一即可)
方案1:修改application.properties配置
在空白的application.properties文件中添加如下配置,指定应用启动后监听9090端口,和Docker配置对齐:
server.port=9090
修改后重新打包Jar、构建Docker镜像、启动容器即可正常访问。
方案2:调整Docker配置适配Spring默认端口
如果不想修改应用配置,可以直接修改Docker相关配置适配默认的8080端口:
- 将Dockerfile中的
EXPOSE 9090改为EXPOSE 8080 - 启动容器的命令调整为:
docker run -p 80:8080 username/demo.jar
重新构建镜像、启动容器即可。
方案3:启动命令中直接指定端口
不需要修改配置文件和Dockerfile,直接修改Dockerfile的ENTRYPOINT指令,启动时动态指定端口:
ENTRYPOINT ["java", "-jar", "demo.jar", "--server.port=9090"]
重新构建镜像启动即可。
验证排查方法
如果修改后仍然有问题,可以按如下步骤排查:
- 执行
docker ps确认容器处于正常运行状态,没有异常退出 - 执行
docker exec -it 容器ID /bin/bash进入容器内部,执行curl localhost:9090(对应你配置的监听端口),确认容器内部可以正常拿到接口返回,再排查端口映射、本地网络相关问题。
内容的提问来源于stack exchange,提问作者Cian Barrett
相关产品推荐
相关产品推荐

