2012-02-06 17 views
6

我试图用SBT运行我的Scala代码,但得到下面的错误。这在使用命令行和IntelliJ Idea的SBT中都会发生。当通过SBT运行Scala应用程序时,权限被拒绝绑定到端口

[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

什么操作系统,分布(如果适用)和版本? – 2012-02-06 14:27:01

+0

在Mac Lion和Ubuntu服务器10.04上出现同样的问题。使用JDK 1.6和SBT 0.11.2和Scala 2.9.1 – Jack 2012-02-06 14:35:04

+0

我不知道狮子,但谷歌搜索没有揭示sudo以外的解决方案。 Ubuntu将使用与Debian相同的解决方案,我将其放在下面的答案中。另请参阅[serverfault question](http://serverfault.com/questions/112795/how-can-i-run-a-server-on-linux-on-port-80-as-a-normal-user) 。请注意,这不是一个编程问题,而是一个操作系统问题。 – 2012-02-06 14:49:13

回答

4

这个问题的解决方案将取决于操作系统上,而不是在任何SBT,斯卡拉或Java可能会做。

例如,提出的Debian three different solutions,所有这些都可以在其他Linux发行版中使用 - 其中两个是上运行的作为根的变化,和所述第三使用iptables来监听端口80

在FreeBSD上,可以完全禁用低端口限制,并且Solaris可以按端口和用户的方式进行操作,如前所述(针对两个)here

4

用“sudo sbt”运行sbt可以解决问题,但这不是解决方案。我在哪里可以设置允许我的Scala应用程序访问端口80的权限。

虽然我认为这是您唯一的解决方案。只有特权应用程序可以绑定到1024以下的端口。

也许您更习惯于在端口80上运行http代理(仅以代理身份运行root),或者有一些ipfilter规则将传入端口80重新路由到端口8080 ?另见this answer

2

您可能想看看commons-daemon [1]及其jsvc二进制文件。这使您可以在某些任务完成后以root身份启动并删除权限。这里的任务可能是端口的绑定。

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

相关问题