【问题标题】:How to configure Jenkins to run on port 80 on Centos 7如何配置 Jenkins 在 Centos 7 的 80 端口上运行
【发布时间】:2017-08-17 09:38:06
【问题描述】:

我已经安装了 Jenkins,它基于 Centos 7 上的 Jetty 服务器。 在配置文件中:/etc/sysconfig/jenkins 默认端口为8080,一切正常,但我需要将jenkins移到80端口。

当我将 JENKINS_PORT="8080" 更改为 JENKINS_PORT="80" - jenkins 不再可用。我关闭了防火墙。

在日志消息中:/var/log/jenkins/jenkins.log

Aug 17, 2017 12:07:45 PM org.eclipse.jetty.util.log.JavaUtilLog warn
WARNING: FAILED ServerConnector@4082ba93{HTTP/1.1}{0.0.0.0:80}: java.net.SocketException: Permission denied
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:321)
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:366)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at winstone.Launcher.<init>(Launcher.java:152)
at winstone.Launcher.main(Launcher.java:352)
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 Main._main(Main.java:293)
at Main.main(Main.java:132)    

谁能帮我解决这个问题?

【问题讨论】:

    标签: jenkins centos7


    【解决方案1】:

    正如@Nimda 回答https://stackoverflow.com/a/45754065/3471694
    我在下面遇到了同样的问题

    SEVERE: Container startup failed
    java.io.IOException: Failed to start Jetty
            at winstone.Launcher.<init>(Launcher.java:186)
            at winstone.Launcher.main(Launcher.java:354)
            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 Main._main(Main.java:344)
            at Main.main(Main.java:160)
    Caused by: 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.openAcceptChannel(ServerConnector.java:339)
            at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:307)
            at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
            at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:235)
            at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
            at org.eclipse.jetty.server.Server.doStart(Server.java:395)
            at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
            at winstone.Launcher.<init>(Launcher.java:184)
            ... 7 more
    

    解决方案:编辑文件 /etc/sysconfig/jenkins 或任何 jenkins 的配置文件
    - 将 #JENKINS_USER="jenkins" 更改为任何可以以 root 身份运行的用户
    示例:JENKINS_USER="root"
    希望对您有所帮助

    【讨论】:

      【解决方案2】:

      谷歌把我带到https://confluence.atlassian.com/confkb/permission-denied-error-when-binding-a-port-290750651.html

      低于 1024 的端口称为特权端口,在 Linux(以及大多数 UNIX 风格和类 UNIX 系统)中,任何非 root 用户都不允许打开它们。

      所以当我以 JENKINS_USER="jenkins" 身份运行启动脚本时,出现了 Permission denied 错误。

      【讨论】:

      • 这个答案不完整。当您确定问题时,您没有提到解决方案。我所做的是在端口 80 上安装一个 httpd 并使用它来代理 tomcat
      【解决方案3】:

      我为这个问题苦苦挣扎了好几个小时。我最终解决这个问题的方法是,在 Ubuntu 上,我将 JENKINS_USER 变量值从 $NAME 更改为 /etc/default/jenkins 中的 root。然后,我通过运行以下命令重新加载了守护进程。

      $ systemctl daemon-reload
      

      最后,我以 root 身份重新启动了 jenkins。

      $ service jenkins restart
      

      【讨论】:

        【解决方案4】:

        你能试试这个 Centos7 防火墙设置吗?

        不需要关闭防火墙。

        firewall-cmd --zone=public --add-port=80/tcp --permanent
        firewall-cmd --zone=public --add-service=http --permanent
        firewall-cmd --reload
        firewall-cmd --list-all
        

        然后启动 Jenkins。

        【讨论】:

        • 添加防火墙条目不会提升权限
        【解决方案5】:

        80 不能被非 root 用户访问,并且 jenkins 是非 root 用户。我更改了端口号,然后它对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-24
          • 2012-07-01
          • 2014-01-31
          • 2011-08-31
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          相关资源
          最近更新 更多