java - 允许在 Ubuntu 17.10 上对 Spring Boot Jar 进行低级端口访问

标签 java spring ubuntu tomcat spring-boot

按照说明操作 here ,我从我的 spring boot 项目 (1.5.8) 中制作了一个可执行 jar,以便将其作为服务运行(我想在端口 443 上运行它)。如果我只是用 java -jar proj.jar 启动它,我会收到一个错误,说端口正在使用中,但是使用 sudo java -jar proj.jar tomcat 可以启动并且该网站有效。

tried to allow low level port access to the jar ,但我仍然收到错误。 (sudo setcap CAP_NET_BIND_SERVICE=+eip/path/to/jarsetcap 'cap_net_bind_service=+ep'/path/to/jar)

我怎样才能给 jar/tomcat 低级端口访问权限,以便它在 443 上运行并且我可以将它作为服务启动?

作为非 root 用户,我以这种方式安装了 jar:

  1. 克隆 repo
  2. chmod +x ./mvnw
  3. ./mvnw package -Dmaven.test.skip=true
  4. cd target 并制作 application.protperties 并复制 keystore.jks
  5. sudo ln -s/home/user/projectname/target/proj-0.0.1-SNAPSHOT.jar/etc/init.d/projectname
  6. sudo chmod +x/etc/init.d/projectname
  7. sudo update-rc.d projectname defaults
  8. sudo service projectname start

检查日志文件,我可以看到错误,但正如我提到的,如果我使用 sudo 启动 jar,它就可以工作。

配置为监听端口 443 的 Tomcat 连接器无法启动。该端口可能已在使用中,或者连接器可能配置错误。

最佳答案

我希望有人能给我一个更好的答案,但如果我直接向 Java 添加低级端口访问(我安装了 oracle),我可以启动 jar: sudo setcap CAP_NET_BIND_SERVICE=+eip/usr/lib/jvm/java-8-oracle/jre/bin/java 我想你可以试试: sudo setcap CAP_NET_BIND_SERVICE=+eip/usr/lib/jvm/java-8-oracle/bin/java

应该也适用于 OpenJDK,但具有不同的可执行位置,我检查我的。:echo $PATH

关于java - 允许在 Ubuntu 17.10 上对 Spring Boot Jar 进行低级端口访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382261/

相关文章:

java - 在 Java 中跳过 String.Contains 中的子字符串

java - RabbitMQ 生产者不会终止

java - 将 Intellij 与 Spring-Data-Neo4j/w Aspectj 一起使用会在尝试创建 Repos 时出现 Java 错误

javascript - 清除ubuntu上的phantomjs缓存

python - 查找工具/脚本/子目录

java - 为什么超过 45 度旋转不起作用

java - 如何在Java中延迟声音

spring - 如何让 spring-boot 在 ubuntu 上永远运行?

java - SpEL 中的#root 和#this

git checkout 获取 ASCII 文件而不是二进制文件