我试图用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的权限。
发布于 2012-02-06 14:34:02
这个问题的解决方案将取决于操作系统,而不是SBT、Scala或Java可能做的任何事情。
例如,Debian提出了three different solutions,所有这些都可以在其他Linux发行版上使用--其中两个是以根用户身份运行的变体,第三个是使用iptables在端口80上进行假监听。
在FreeBSD上,可以完全禁用低端口限制,并且可以针对每个端口和用户执行此操作,正如(针对两个) here所述。
发布于 2012-02-06 07:47:27
运行sbt和"sudo sbt“的
可以解决这个问题,但这不是解决方案。我可以在哪里设置允许我的Scala应用程序访问端口80的权限。
不过,我认为这是你唯一的解决方案。只有特权应用程序才能绑定到1024以下的端口。
也许您更喜欢在端口80上运行http代理(仅将代理作为根),或者使用一些ipfilter规则将传入端口80重新路由到端口8080?另请参见this answer。
发布于 2012-02-06 08:33:24
您可能希望了解commons-daemon 1及其jsvc二进制文件。这允许您以root用户身份启动,并在执行某些任务后删除权限。这里的任务可以是绑定端口。
https://stackoverflow.com/questions/9157001
复制