Ubuntu 20.04自托管Github Actions Runner Node20 GLIBC依赖错误
问题分析
报错/__e/node20/bin/node: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28' not found的核心原因是:自托管Runner在容器环境中执行时,使用的是容器内部的GLIBC库,而非宿主机的。你的宿主机GLIBC版本足够,但容器镜像的GLIBC版本低于Node20要求的2.28,导致依赖缺失。
根本解决方案
1. 升级容器镜像的GLIBC版本
容器镜像是问题的根源,直接升级镜像到包含GLIBC 2.28+的基础版本:
- 如果你的容器基于Ubuntu 18.04或更早版本,替换为Ubuntu 20.04/22.04、Debian 10+等基础镜像,这些系统默认包含符合要求的GLIBC版本。
- 若无法更换基础镜像,可在Dockerfile中手动升级GLIBC(不推荐,易引发依赖冲突),示例:
# 以Ubuntu 18.04为例 RUN apt-get update && apt-get install -y wget RUN wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz && tar xzf glibc-2.28.tar.gz RUN cd glibc-2.28 && mkdir build && cd build && ../configure --prefix=/usr && make && make install
2. 使用静态编译版Node.js 20
静态编译的Node.js不依赖系统GLIBC,可直接在容器内安装:
在Workflow的steps中添加安装步骤,替代Runner自带的Node20:
steps: - name: Install static Node.js 20 run: | curl -O https://nodejs.org/dist/v20.15.0/node-v20.15.0-linux-x64.tar.xz tar -xf node-v20.15.0-linux-x64.tar.xz echo "$PWD/node-v20.15.0-linux-x64/bin" >> $GITHUB_PATH - name: Checkout Source Code uses: actions/checkout@v4.1.7
3. 升级自托管Runner到最新版本
旧版Runner(v2.317.0)可能存在Node20与容器环境的兼容性问题,升级到官方最新版Runner:
# 停止当前Runner服务 sudo ./svc.sh stop # 下载最新版Runner(替换对应系统的下载链接) curl -O https://github.com/actions/runner/releases/download/v2.320.0/actions-runner-linux-x64-2.320.0.tar.gz tar xzf actions-runner-linux-x64-2.320.0.tar.gz # 重新配置并启动服务 sudo ./svc.sh install sudo ./svc.sh start
4. 配置Workflow使用容器内的Node环境
通过actions/setup-node指定使用容器内预安装的Node,而非Runner自带版本:
jobs: my-job: runs-on: [my-ubuntu] timeout-minutes: 120 container: image: my-image-path:latest credentials: username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} steps: - name: Setup Node.js 20 uses: actions/setup-node@v4 with: node-version: '20' check-latest: true - name: Checkout Source Code uses: actions/checkout@v4.1.7
内容的提问来源于stack exchange,提问作者Chinmaya Biswal
相关产品推荐
相关产品推荐

