Spark 绑定 http 端口失败

Spark fails to bind http port

我正在尝试将端口 80 绑定到我的 Spark 服务器:

import static spark.Spark.get;
import static spark.Spark.port;

public class Main {

    public static void main(String[] args) {
        port(80);
        get("/hello", (request, response) -> "hello world");
    }
}

但由于某种原因,我收到以下错误:

22:51:56.067 [Thread-0] ERROR spark.Spark - ignite failed
java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:298)
    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.server.Server.doStart(Server.java:431)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at spark.embeddedserver.jetty.EmbeddedJettyServer.ignite(EmbeddedJettyServer.java:149)
    at spark.Service.lambda$init(Service.java:496)
    at java.lang.Thread.run(Thread.java:748)

我在我的 OS 中到处搜索是否有任何连接到端口 80 的绑定,但我没有找到。
有什么解决办法吗?

直接绑定到端口 80 可能不是一个好主意。

此端口(任何小于 1024 的端口)需要 root 权限(但 运行宁可作为 root 非常不鼓励),或者一些 capabilities setting

通常你 运行 Spark 在非特权端口上。如果你确实想将它公开为 Web 连接的默认值,请考虑通过 Web 服务器代理它,例如 nginx 或 apache;无论如何,您可能希望在附近举办其他活动。