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

GitLab Pipeline构建Quarkus项目Docker化时遇Ryuk容器启动错误

问题诊断与修复方案

从报错信息来看,核心问题有两个:

  1. GitLab Runner容器内缺失Docker CLI:No docker binary found明确说明,Quarkus构建容器镜像需要调用Docker命令,但当前使用的maven:latest镜像未预装Docker客户端。
  2. Ryuk容器启动失败:Ryuk是Testcontainers的容器清理组件,即便添加了-DskipTests,部分Quarkus扩展或构建流程仍可能触发Testcontainers初始化,而Runner环境未正确配置Docker访问权限。

具体修复步骤

1. 补充Docker CLI环境

有两种方式解决Docker CLI缺失问题:

  • 更换预装Docker的Maven镜像:
    image: maven:3.9-eclipse-temurin-17-alpine
    
  • 在before_script中安装Docker CLI:
    before_script:
      - apt-get update -qq
      - apt-get install -y -qq build-essential libz-dev zlib1g-dev docker.io
    

2. 配置GitLab Runner挂载Docker Socket

如果使用Docker executor类型的GitLab Runner,需要修改Runner的config.toml,挂载宿主机的Docker Socket,让Runner容器内的Docker CLI能访问宿主机的Docker daemon:

[[runners]]
  name = "Docker Runner"
  url = "https://your-gitlab-instance.com/"
  token = "your-runner-token"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "maven:latest"
    privileged = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

3. 强制禁用Testcontainers

如果不需要Testcontainers参与任何构建环节,添加参数彻底禁用它:

script:
  - mvn clean package -DskipTests -Dquarkus.profile=dev -Dquarkus.container-image.build=true -Dquarkus.container-image.push=true -Dquarkus.container-image.group=pss -Dquarkus.container-image.tag=$CI_BUILD_REF -Dquarkus.container-image.registry=$DOCKER_REGISTRY_AZURE_URL -Dquarkus.container-image.username=$DOCKER_REGISTRY_AZURE_USERNAME -Dquarkus.container-image.password=$DOCKER_REGISTRY_AZURE_PASSWORD -Dtestcontainers.enabled=false

4. 修复Docker Socket访问权限

确保Runner容器内的用户有权限访问挂载的Docker Socket,可在before_script中添加:

before_script:
  - ...
  - usermod -aG docker $USER

验证用完整Pipeline示例

image: maven:3.9-eclipse-temurin-17-alpine

stages:
  - build-package-dockerize
  - deploy

before_script:
  - apk add --no-cache docker-cli
  - addgroup -S docker && adduser -S $USER -G docker

build, package, dockerize:
  stage: build-package-dockerize
  script:
    - mvn clean package -DskipTests -Dquarkus.profile=dev -Dquarkus.container-image.build=true -Dquarkus.container-image.push=true -Dquarkus.container-image.group=pss -Dquarkus.container-image.tag=$CI_BUILD_REF -Dquarkus.container-image.registry=$DOCKER_REGISTRY_AZURE_URL -Dquarkus.container-image.username=$DOCKER_REGISTRY_AZURE_USERNAME -Dquarkus.container-image.password=$DOCKER_REGISTRY_AZURE_PASSWORD -Dtestcontainers.enabled=false
  only:
    - DEV

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:20:57