You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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固定映射到某个容器上。

内容的提问来源于stack exchange,提问作者user2979853

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:32:13