Docker化Spring Boot应用后Postman访问返回404无法连接问题求助
问题描述


- 应用Docker化后无法通过Postman连接,服务日志显示应用正常启动,H2数据库可正常访问,但Postman请求返回404错误
错误返回内容:
{
"timestamp": "2021-08-29T09:08:05.775+00:00",
"status": 404,
"error": "Not Found",
"path": "/"
}
- 已尝试排查操作:关闭SSL配置未解决问题,本地其他应用均可正常通过Postman访问
- 已附pom.xml和application.properties配置文件,如需Java代码可补充提供
相关配置
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.eazybytes</groupId> <artifactId>accounts</artifactId> <version>0.0.1-SNAPSHOT</version> <name>accounts</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
application.properties
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true server.port=9092
排查解决方法
返回404说明网络连通正常,只是请求的路径在应用中不存在,按以下步骤排查即可:
- 校验Docker端口映射
应用配置端口为9092,启动容器时必须添加-p 9092:9092参数完成宿主机和容器的端口绑定,若映射了其他宿主机端口,Postman请求需对应使用映射后的端口。 - 校验请求路径
你当前请求的是根路径/,首先确认Controller是否存在根路径的请求映射:
- 若Controller类上标注了
@RequestMapping前缀,所有请求路径都需要加上该前缀 - 若未开发根路径接口,直接请求根路径必然返回404,可换成你实际开发的业务接口路径测试
- 校验上下文路径配置
确认配置文件是否添加了server.servlet.context-path参数,若配置了该参数,所有请求路径都需要加上配置的上下文前缀 - 校验容器运行状态
执行docker ps确认容器处于运行状态,执行docker logs <容器ID>查看应用启动日志,确认9092端口正常绑定、应用无启动异常
内容的提问来源于stack exchange,提问作者Seeschon
相关产品推荐
相关产品推荐

