Docker与SpringBoot端口占用问题及Maven测试端口传参求助
一、通过Maven命令行指定SpringBootTest的端口
- 直接在Maven命令中传递系统属性即可:
mvn clean install -Dserver.port=8081,这样测试时SpringBoot会使用你指定的8081端口,避开被占用的8080。 - 如果已经配置了
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)但还是固定用8080,大概率是测试配置里硬编码了端口,或者有其他配置覆盖了随机端口逻辑。这时候除了用上面的-Dserver.port参数强制指定,还要检查测试类的注解,确保没写死固定端口。 - 也可以在pom.xml里配置surefire插件,让它自动传递系统属性给测试:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <systemPropertyVariables> <server.port>${server.port:0}</server.port> </systemPropertyVariables> </configuration> </plugin>
配置完后,执行mvn clean install -Dserver.port=8081就能生效;如果不指定端口,就用0(即随机端口)。
二、wslrelay.exe占用8080端口的原因
- wslrelay.exe是WSL(Windows子系统Linux)的网络转发进程,负责打通Windows和WSL之间的网络。它占用8080主要有两种情况:
- 你在WSL环境里运行了监听8080端口的服务,比如Nginx、Node.js后端或者其他程序,WSL通过wslrelay把这个端口映射到Windows主机上,所以主机的8080被占用。
- 使用Docker Desktop的WSL2后端时,可能出现网络配置异常,比如之前运行的容器没正确停止,或者WSL网络栈没重置,导致wslrelay错误占用8080端口。
- 解决办法:
- 打开WSL终端,执行
netstat -tulpn | grep 8080找到占用端口的进程PID,然后用kill -9 [PID]杀掉它。 - 如果找不到WSL里的进程,直接重启WSL:在Windows命令行执行
wsl --shutdown,之后再重启WSL或者Docker Desktop即可。 - 检查Docker Desktop的端口映射设置,确认有没有把8080固定映射到某个容器上。
- 打开WSL终端,执行
内容的提问来源于stack exchange,提问作者user2979853
相关产品推荐
相关产品推荐

