创建GitLab容器后Jenkins登录UI即崩溃问题求助
问题
通过docker-compose部署了remote_host、Jenkins、GitLab三个容器,所有容器均可正常启动,但登录Jenkins UI时,Jenkins容器随即崩溃;停止GitLab容器后该问题不再出现。
提供的配置与日志
docker-compose文件
version: '3' services: remote_host: container_name: remote-host image: remote-host build: context: centos7 networks: - net jenkins: container_name: jenkins image: jenkins-blueocean ports: - "8081:8080" build: context: . volumes: - "$PWD/jenkins_home:/var/jenkins_home" restart: on-failure networks: - net git: container_name: git-server image: 'gitlab/gitlab-ee:latest' hostname: 'gitlab.example.com' ports: - '8091:80' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' networks: - net networks: net:
启动命令
export GITLAB_HOME=$HOME/gitlab docker-compose up -d
Jenkins报错日志
at java.base/java.lang.Thread.run(Thread.java:829) 2023-03-26 14:23:36 Caused by: java.lang.AssertionError: class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor 2023-03-26 14:23:36 at jenkins.model.Jenkins.getDescriptorOrDie(Jenkins.java:1634) 2023-03-26 14:23:36 at hudson.security.csrf.CrumbIssuer.getDescriptor(CrumbIssuer.java:141) 2023-03-26 14:23:36 at hudson.Functions.getCrumbRequestField(Functions.java:1997) 2023-03-26 14:23:36 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 2023-03-26 14:23:36 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 2023-03-26 14:23:36 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 2023-03-26 14:23:36 at java.base/java.lang.reflect.Method.invoke(Method.java:566) 2023-03-26 14:23:36 at org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:258) 2023-03-26 14:23:36 at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:104) 2023-03-26 14:23:36 at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) 2023-03-26 14:23:36 at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) 2023-03-26 14:23:36 at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) 2023-03-26 14:23:36 at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) 2023-03-26 14:23:36 at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:76) 2023-03-26 14:23:36 at org.apache.commons.jelly.expression.ExpressionSupport.evaluateRecurse(ExpressionSupport.java:61) 2023-03-26 14:23:36 at org.apache.commons.jelly.expression.ExpressionSupport.evaluateAsString(ExpressionSupport.java:46) 2023-03-26 14:23:36 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.buildAttributes(ReallyStaticTagLibrary.java:113) 2023-03-26 14:23:36 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:97) 2023-03-26 14:23:36 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) 2023-03-26 14:23:36 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:101) 2023-03-26 14:23:36 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) 2023-03-26 14:23:36 at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:101) 2023-03-26 14:23:36 at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) 2023-03-26 14:23:36 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:265) 2023-03-26 14:23:36 ... 58 more 2023-03-26 14:23:36 Caused: javax.servlet.ServletException 2023-03-26 14:23:36 at org.kohsuke.stapler.Facet$1.dispatch(Facet.java:249) 2023-03-26 14:23:36 at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:762) 2023-03-26 14:23:36 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:894) 2023-03-26 14:23:36 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:690) 2023-03-26 14:23:36 at hudson.init.impl.InstallUncaughtExceptionHandler.handleException(InstallUncaughtExceptionHandler.java:59) 2023-03-26 14:23:36 at hudson.init.impl.InstallUncaughtExceptionHandler.lambda$init$0(InstallUncaughtExceptionHandler.java:33) 2023-03-26 14:23:36 at org.kohsuke.stapler.compression.CompressionFilter.reportException(CompressionFilter.java:72) 2023-03-26 14:23:36 at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:56) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) 2023-03-26 14:23:36 at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:86) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) 2023-03-26 14:23:36 at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) 2023-03-26 14:23:36 at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:38) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) 2023-03-26 14:23:36 at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527) 2023-03-26 14:23:36 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) 2023-03-26 14:23:36 at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:549) 2023-03-26 14:23:36 at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) 2023-03-26 14:23:36 at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) 2023-03-26 14:23:36 at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) 2023-03-26 14:23:36 at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) 2023-03-26 14:23:36 at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1383) 2023-03-26 14:23:36 at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
解决方案
1. 限制容器资源,避免资源抢占
GitLab属于资源密集型应用,会占用大量内存、CPU资源,当和Jenkins同时运行时,可能导致Jenkins因资源不足崩溃。
- 先通过
top或htop查看宿主机资源占用情况,确认GitLab启动后是否剩余足够资源给Jenkins。 - 在docker-compose中为两个容器添加资源限制,防止资源耗尽:
git: # 保留原有配置 deploy: resources: limits: cpus: '2.0' memory: 4G jenkins: # 保留原有配置 deploy: resources: limits: cpus: '1.0' memory: 2G
2. 修复Jenkins CSRF组件异常
日志核心报错class hudson.security.csrf.DefaultCrumbIssuer is missing its descriptor说明Jenkins的CSRF令牌组件异常,大概率是jenkins_home目录损坏或权限问题:
- 停止Jenkins容器并备份现有数据:
docker-compose stop jenkins cp -r $PWD/jenkins_home $PWD/jenkins_home_backup
- 删除原数据目录,重新启动Jenkins初始化新配置:
rm -rf $PWD/jenkins_home docker-compose up -d jenkins
- 等Jenkins初始化完成后,再启动GitLab容器测试是否恢复正常。
3. 排查网络冲突
同一自定义网络下可能存在DNS或端口寻址异常,可尝试:
- 修改Jenkins端口映射,比如将
8081:8080改为8082:8080,避免潜在端口冲突。 - 给每个容器分配固定IP,避免网络寻址问题:
services: remote_host: # 原有配置不变 networks: net: ipv4_address: 172.20.0.2 jenkins: # 原有配置不变 networks: net: ipv4_address: 172.20.0.3 git: # 原有配置不变 networks: net: ipv4_address: 172.20.0.4 networks: net: ipam: config: - subnet: 172.20.0.0/24
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

