You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Runner未使用Docker镜像执行before_script,apt-get命令未找到

问题分析与解决方案

你遇到的问题核心在于GitLab Runner的执行器类型和你预期的不一致,导致.gitlab-ci.yml里的image: ubuntu:latest配置根本没生效,作业直接跑在了你的Redhat宿主机上,自然找不到apt-get命令。

为什么会这样?

GitLab Runner有多种执行器类型,其中:

  • Docker执行器:会根据你指定的镜像创建独立容器,在容器内执行作业,完全隔离宿主机环境。
  • Shell执行器:直接在Runner所在的宿主机系统上执行命令,会忽略你在.gitlab-ci.yml里指定的image配置。
    你的Runner用的是Shell执行器,所以虽然写了ubuntu:latest,但实际运行环境是Redhat(用yum而不是apt-get)。

解决方法

方案1:切换为Docker执行器(推荐,隔离性更好)

  1. 打开GitLab Runner的配置文件,通常路径是/etc/gitlab-runner/config.toml
  2. 修改executor字段为docker,并添加默认镜像配置(可选):
    [[runners]]
      name = "Your Runner Name"
      url = "https://your-gitlab-instance.com/"
      token = "your-runner-token"
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "ubuntu:latest"  # 默认镜像,也可以在.gitlab-ci.yml里指定
        privileged = false
        disable_entrypoint_overwrite = false
        oom_kill_disable = false
        disable_cache = false
        volumes = ["/cache"]
        shm_size = 0
    
  3. 重启GitLab Runner服务:
    sudo gitlab-runner restart
    

这样配置后,作业会在Ubuntu容器内运行,apt-get命令就能正常使用了。

方案2:继续使用Shell执行器,适配Redhat环境

如果你必须用Shell执行器,需要把作业里的命令换成Redhat兼容的:

  1. 修改.gitlab-ci.yml的before_script部分:
    before_script:
      - yum update -y
      # 注意:Redhat下的PHP扩展包名称和Ubuntu不同,需要调整,比如:
      - yum install -y php-mbstring php-mcrypt php-pdo_pgsql php-curl php-json php-intl php-gd php-xml php-zip php-bz2 php-opcache
    
  2. 确保宿主机已经安装了PHP和相关依赖,否则需要先在Redhat服务器上提前部署好这些环境。

内容的提问来源于stack exchange,提问作者Fanan Dala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:07:41