Jenkins无法启动:无法在8080端口监听

20

我正在使用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

2
由于错误日志显示端口8080已经绑定到另一个JVM进程上 - 你是否尝试过使用telnet连接到该地址并查看响应? - Filburt
10个回答

29

已经解决 - 对于以后可能遇到该问题的人。我使用了这篇Techrepublic文章,它简化为:

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

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


2
在尝试重新启动Jenkins之后,可能会发生Java进程未正确关闭的情况...请尝试手动结束Java进程,然后重新启动Jenkins服务。 - Noam Manos

20

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

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

此外,在Windows中检查某个端口是否被任何应用程序使用,可以使用以下命令:

netstat -ano | find "9090"

最好在Tomcat上运行Jenkins。


4

在错误堆栈跟踪中提到端口8080已被使用,请检查端口8080的使用情况,或者作为替代方案,在Jenkins.xml中更改Jenkins端口为其他可用端口。


2

为了帮助其他人,我把这里放着 -- 我遇到了同样的问题 -- 端口8080被阻塞了。

如果你能相信这个 -- Windows Store在端口8080上运行并阻止了我的Jenkins端口。真气人!

解决步骤:

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

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

3)使用以下命令(感谢@Joy-Qiao发现的文章)来删除Windows Store应用程序(使用PowerShell):Get-AppxPackage windowsstore | Remove-AppxPackage

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


2

我曾经遇到过类似的问题,尝试升级Jenkins以满足要求,但是Windows服务无法启动,由于另一个程序正在使用端口8080。后来发现是java.exe进程的一个实例,当我在任务管理器中结束它后,一切都恢复正常了。


我也遇到了同样的问题。 - KnockingHeads

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

这真的很有帮助,我在安装Jenkins时遇到了不同的异常情况。

1

0

使用 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(这里是1236169) 杀死进程, 然后重新启动Jenkins服务 sudo service jenkins restart


0

如果您正在使用Docker,请确保使用 -p 选项来指定端口 docker run -p 8080:8080 jenkinks/jenkins:latest


-2

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

解决了我的问题。


1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您提出代码建议的原因。请尽量不要在代码中添加过多的解释性注释,这会降低代码和解释的可读性! - Filnor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接