通过SBT运行Scala应用程序时,权限被拒绝绑定到端口

时间:2012-02-06 07:44:18

标签: scala sbt netty

我正在尝试使用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的权限。

3 个答案:

答案 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身份启动并删除权限。这里的任务可能是端口的绑定。

[1] http://commons.apache.org/daemon/