从浏览器访问Docker容器内的Spring Boot服务失败,是否为端口配置问题?
端口访问问题排查方案
你提供的接口代码逻辑没有问题:
@RestController public class MyController { @CrossOrigin @GetMapping(value = "/test") public String test() { return "hello"; } }
你遇到的无法访问问题大概率和Docker端口映射配置有关,可按以下步骤排查:
1. 确认容器内Spring Boot服务的实际运行端口
Spring Boot默认端口为8080,如果你在application.properties或application.yml中配置了server.port参数,容器内服务的端口会以你配置的为准,优先确认该值。
2. 检查Docker端口映射配置(最常见的问题点)
Docker容器默认和宿主机网络隔离,你需要在启动容器时显式配置端口映射才能从宿主机访问容器内的服务:
- 正确的启动命令格式为
docker run -d -p 宿主机端口:容器内服务端口 镜像名称
比如你容器内服务跑在8080,想通过宿主机9090端口访问,启动命令应为:docker run -d -p 9090:8080 你的镜像名 - 执行
docker ps找到你服务对应的容器ID/容器名称,再执行docker port 容器ID/容器名称即可查看当前容器的端口映射规则,确认宿主机端口和容器内端口的对应关系是否符合预期
3. 确认服务正常运行
执行docker logs 容器ID/容器名称查看服务启动日志,确认Spring Boot服务已经成功启动,没有端口占用、依赖缺失、配置错误等启动异常。
4. 排除网络限制
如果你是在云服务器/虚拟机部署,需要确认宿主机的防火墙、安全组规则已经放开了你映射的宿主机端口。
确认以上配置无误后,访问http://宿主机IP:映射的宿主机端口/test即可正常调用接口。
内容的提问来源于stack exchange,提问作者Oliver Watkins
相关产品推荐
相关产品推荐

