【问题标题】:Jenkins won't start: Failed to listen on port 8080Jenkins 无法启动:无法监听 8080 端口
【发布时间】:2026-02-03 03:00:01
【问题描述】:

我正在使用 Jenkins,但从昨天开始它就停止了工作。我查看了 Windows 服务,它已被停止(不知何故)。我重新启动它,但它立即停止。

我查看了服务运行所在的目录 (C:\Program Files\Jenkins),并在其中打开了名为 jenkins.out.log 的日志文件。就是这么写的

Running from: C:\Program Files\Jenkins\jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
[Winstone 2012/05/17 10:14:42] - Beginning extraction from war file
Jenkins home directory: C:\Program Files\Jenkins found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
[Winstone 2012/05/17 10:14:44] - Winstone shutdown successfully
[Winstone 2012/05/17 10:14:44] - Container startup failed
java.io.IOException: Failed to start a listener: winstone.HttpListener
    at winstone.Launcher.spawnListener(Launcher.java:250)
    at winstone.Launcher.<init>(Launcher.java:202)
    at winstone.Launcher.main(Launcher.java:398)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at Main._main(Main.java:268)
    at Main.main(Main.java:96)
Caused by: java.io.IOException: Failed to listen on port 8080
    at winstone.HttpListener.getServerSocket(HttpListener.java:117)
    at winstone.HttpListener.start(HttpListener.java:70)
    at winstone.Launcher.spawnListener(Launcher.java:241)
    ... 8 more
Caused by: java.net.BindException: Address already in use: JVM_Bind
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at winstone.HttpListener.getServerSocket(HttpListener.java:112)
    ... 10 more

【问题讨论】:

  • 由于错误日志声称端口 8080 已经绑定到另一个 JVM 进程 - 您是否尝试 telnet 到该地址并查看答案?

标签: jenkins


【解决方案1】:

要在 WinStone 容器(与 Jenkins war 捆绑的默认容器)上启动 Jenkins,请使用以下命令:

java -jar jenkins.war --ajp13Port=-1 --httpPort=9090

另外,检查某个端口是否被 Windows 中的任何应用程序使用:

netstat -ano | find "9090"

最好在 Tomcat 上运行 Jenkins。

【讨论】:

    【解决方案2】:

    已修复 - 适用于将来可能遇到此问题的任何其他人。我用了这个Techrepublic article,归结为

    netstat -a -n -o | grep "8080"
    

    找出如何找出哪个进程正在使用端口 8080,然后在任务管理器中将其杀死,然后重新启动 Jenkins,一切都很好(到目前为止!)。

    【讨论】:

    • 在尝试重新启动 Jenkins 后可能会发生,其中 Java 进程未正确关闭...尝试手动杀死 Java 进程,然后重新启动 Jenkins 服务。
    【解决方案3】:

    对于 Nginx 服务器SSL 证书,您必须从 nginx link 检查此文档,并将 nginx 服务器配置为侦听端口 8080

    它与我一起使用jenkins.your_site_domain.com 和端口8080 之类的子域

    【讨论】:

      【解决方案4】:

      把它放在这里以防它对某人有所帮助——我遇到了同样的初始问题——端口 8080 被阻塞。

      如果您相信这个 --windows 商店在端口 8080 上运行并阻塞了我的 Jenkins 端口。咕噜!

      补救措施:

      1) 使用上面@HenryHey 的答案来查找PID:netstat -a -n -o | grep "8080"

      2) 使用 sysinternals proc explorer 查找注册到 PID 的程序

      3) 使用以下命令(找到 @Joy-Qiao 的文章 - 谢谢)删除 windows 商店应用程序(使用 powershell):Get-AppxPackage windowsstore |删除-AppxPackage

      注意:这是清除端口 8080 的一种相当激进的方法 - 更好的选择是将 Jenkins 移动到另一个端口,但我感觉有点过分。

      【讨论】:

        【解决方案5】:

        在错误堆栈跟踪中提到端口 8080 已在使用中,检查端口 8080 的使用位置,或者将 Jenkins.xml 中的 Jenkins 端口更改为其他可用端口。

        【讨论】:

          【解决方案6】:
          java -jar jenkins.war --ajp13Port=-1 --httpPort=9090
          

          这真的很有帮助,当我在安装 Jenkins 期间遇到不同的异常时使用它。

          【讨论】:

            【解决方案7】:

            java -jar jenkins.war --ajp13Port=-1 --httpPort=9090

            解决了我的问题

            【讨论】:

            • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
            【解决方案8】:

            我遇到了类似的问题,尝试按照它的要求升级 Jenkins,但是 Windows 服务无法启动,端口 8080 上正在运行其他东西。结果是我杀死后 java.exe 进程的一个实例它在任务管理器中都开始正常工作。

            【讨论】:

              【解决方案9】:

              使用ps -aux | grep -i 'java'查找进程ID 如果有任何使用 8080 端口的 java 程序,您将得到以下输出

              jenkins  1236169  246 25.6 7877352 4159028 ?     Sl   04:49 538:57 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
              

              然后使用命令sudo kill -9 PID(here it is 1236169 ) 杀死进程 然后重启jenkins服务 sudo service jenkins restart

              【讨论】: