2012-02-06 12 views
6

Estoy intentando ejecutar mi código Scala con SBT, pero obtengo el siguiente error. Esto sucede tanto con SBT usando la línea de comando como con IntelliJ Idea.Permiso denegado para vincular al puerto cuando se ejecuta la aplicación Scala a través de SBT

[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 

¿Qué configuro para permitir el acceso al puerto. Esto sucede tanto cuando trato de ejecutar en mi Mac local como en mi servidor Ubuntu remoto.

Ejecutar sbt con "sudo sbt" soluciona el problema, pero esta no es la solución. ¿Dónde puedo establecer el permiso para permitir que mi aplicación Scala acceda al puerto 80.

+0

¿Qué sistema operativo, distribución (si corresponde) y versión? –

+0

Mismo problema en Mac Lion y el servidor de Ubuntu 10.04. Usando JDK 1.6 y SBT 0.11.2 y Scala 2.9.1 – Jack

+0

No sé sobre Lion, pero Google no reveló otra solución que sudo. Ubuntu usaría las mismas soluciones que Debian, que puse en mi respuesta a continuación. Ver también la [pregunta del servidor] (http://serverfault.com/questions/112795/how-can-i-run-a-server-on-linux-on-port-80-as-a-normal-user) . Tenga en cuenta que esto no es un problema de programación, sino un problema del sistema operativo. –

Respuesta

4

La solución a este problema dependerá del sistema operativo, no en cualquier cosa que SBT, Scala o Java podrían hacer.

Por ejemplo, Debian propone three different solutions, todos los cuales pueden ser utilizados en otras distribuciones de Linux - dos de ellos son variaciones sobre cómo ejecutar como root, y el tercero utiliza iptables para falsa escuchando en el puerto 80.

En FreeBSD, se puede deshabilitar completamente la limitación de puerto bajo, y Solaris puede hacerlo por puerto y usuario, como se describe (para ambos) here.

4

Ejecutar sbt con "sudo sbt" soluciona el problema, pero esta no es la solución. ¿Dónde puedo configurar el permiso para permitir que mi aplicación Scala acceda al puerto 80.

Creo que es su única solución. Solo las aplicaciones con privilegios pueden vincularse a puertos bajo 1024.

Quizás esté más cómodo con ejecutar un proxy http en el puerto 80 (solo el proxy como root), o tenga alguna regla ipfilter que redireccione el puerto 80 al puerto 8080 ? Vea también this answer.

2

Es posible que desee echar un vistazo a commons-daemon [1] y su binario jsvc. Esto le permite comenzar como privilegios de root y drop después de algunas tareas. Las tareas aquí podrían ser la vinculación del puerto.

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

Cuestiones relacionadas