我正在尝试使用 Cargo 在端口 8080 上运行 Tomcat,但它给出了以下消息:
org.codehaus.cargo.container.ContainerException:端口号 8080(使用属性 cargo.servlet.port 定义)正在使用中。请在系统上释放它或在容器配置中将其设置为其他端口。
当我telnet
访问 8080 上的本地主机时,它就连接了。
但是,当我 时sudo lsof -n | grep 8080
,我什么也看不到。两者都没有运气netstat
。
可能是什么问题呢?
答案1
很多网络命令的输出默认更易于阅读。它们使用主机名和服务名,而不是 IP 地址和端口号。
APP.DOMAIN.COM:http (LISTEN)
对比 10.191.12.109:80 (LISTEN)
对于grep
此类命令输出中的端口号,您必须确保它使用端口号。lsof
这是-P
命令选项。
sudo lsof -n -P | grep :8080
因为netsat
使用-n
会关闭主机名和服务名。
sudo netstat -lpn | grep :8080
答案2
lsof
@Brian 建议的命令应该可以工作(尽管我更喜欢用进行lsof
自己的过滤sudo lsof -i:8080
)。如果您没有看到任何这些命令,我怀疑还有其他事情发生。例如,Tomcat 是否可能试图两次打开端口并与自身发生冲突?
答案3
我还很难找到在端口 8080 上运行的程序,因为 sudo lsof -i:8080 和 netstat 命令都没有显示任何特定于端口 8080 的内容。我运行了 sudo lsof -i:80 命令来查找正在使用它的程序 - 结果是安装在我的 Mac 上的 ESet Antivirus 阻止了它。我卸载了 ESet,现在一切都好了。