我試圖在 ubuntu 16.04 的連接埠 8010 上將 jetty 作為服務運行。
據我所知,1024 以上的連接埠可以免費使用,所以我想知道為什麼會出現此錯誤以及如何修復它。我之前曾嘗試過連接埠 8080,這給出了相同的錯誤和另一個錯誤:java.net.BindException:位址已在使用中:bind。這就是為什麼我將其更改為未使用的連接埠 8010。
我知道 <1024 的連接埠需要 root 存取權限,但據我所知,1024 以上的連接埠應該允許在沒有 root 存取權限的情況下使用。那麼如何授予我的服務綁定連接埠的權限呢?
這是碼頭日誌的摘錄:
2017-09-28 06:24:57.287:INFO:oejs.AbstractConnector:main: Started ServerConnector@48b22fd4{HTTP/1.1,[http/1.1]}{0.0.0.0:8010}
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:215)
at org.eclipse.jetty.start.Main.start(Main.java:458)
at org.eclipse.jetty.start.Main.main(Main.java:76)
Caused by: java.net.SocketException: Keine Berechtigung
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)
答案1
事實證明,jetty 試圖綁定到 2 個連接埠:8010 和 443,儘管在日誌中它只顯示 8010 並出現錯誤。
將 ssl 連接埠更改為 1024 以上解決了該問題。
我曾嘗試為該服務提供完全 root 存取權限,但這仍然不允許該服務在低於 1024 的連接埠上運行。