我正在尝试使用SBT运行我的Scala代码,但是得到以下错误。 SBT使用命令行和IntelliJ Idea都会发生这种情况。
[error] (run-main) org.jboss.netty.channel.ChannelException:
Failed to bind to: /127.0.0.1:80
org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:80
....
....
Caused by: java.net.SocketException: Permission denied
我配置什么以允许端口访问。当我尝试在我的本地Mac和远程Ubuntu服务器上运行时,会发生这种情况。
使用“sudo sbt”运行sbt可以解决问题,但这不是解决方案。我在哪里可以设置允许我的Scala应用访问端口80的权限。
答案 0 :(得分:4)
使用“sudo sbt”运行sbt可以解决问题,但这不是解决方案。我在哪里可以设置允许我的Scala应用访问端口80的权限。
我认为这是你唯一的解决方案。只有特权应用程序才能绑定到1024以下的端口。
也许你更喜欢在端口80上运行http代理(只有代理作为root),或者有一些ipfilter规则将传入端口80重新路由到端口8080?另请参阅this answer。
答案 1 :(得分:4)
此问题的解决方案将取决于操作系统,而不取决于SBT,Scala或Java可能执行的任何操作。
例如,Debian提出three different solutions,所有这些都可用于其他Linux发行版 - 其中两个是以root身份运行的变体,第三个使用iptables来假在80号港口听。
在FreeBSD上,可以完全禁用低端口限制,并且Solaris可以按端口和用户执行此操作,如({3}}所述(<2}}。
答案 2 :(得分:2)
您可能希望查看commons-daemon [1]及其jsvc二进制文件。这允许您在执行某些任务后以root身份启动并删除权限。这里的任务可能是端口的绑定。