Gitlab CI环境下Docker容器构建失败求助
问题解决:GitLab CI中Docker构建时runc未正常终止
本地构建Docker容器无问题,但GitLab CI流水线执行构建时出现错误:
ERROR: failed to solve: failed to solve with frontend dockerfile.v0: failed to solve with frontend gateway.v0: rpc error: code = Unknown desc = failed to build LLB: executor failed running [/bin/sh -c python3 -m pip install -r requirements.txt]: runc did not terminate sucessfully
以下是针对性的解决方案:
1. 对齐Docker客户端与DinD服务版本
当前使用docker:latest客户端搭配docker:19-dind服务,版本不匹配会引发兼容性问题。将服务替换为与客户端同版本的docker:dind:
修改.gitlab-ci.yml的services部分:
services: - docker:dind
2. 禁用Docker BuildKit
部分GitLab DinD环境对BuildKit支持不完善,可通过环境变量禁用:
修改.gitlab-ci.yml的build命令:
- DOCKER_BUILDKIT=0 docker build -t $DOCKER_REGISTRY/$APP_NAME:$CI_PIPELINE_IID .
3. 排查pip缓存挂载的权限问题
Dockerfile中使用的--mount=type=cache在CI环境可能存在权限冲突,先尝试移除缓存挂载,验证基础构建是否正常:
修改Dockerfile的RUN指令:
RUN python3 -m pip install -r requirements.txt
4. 增加Runner资源配额
pip安装依赖时内存或CPU不足会导致runc崩溃,为CI任务添加资源限制:
在.gitlab-ci.yml的publish job中添加:
resources: requests: memory: "2Gi" cpu: "1" limits: memory: "4Gi" cpu: "2"
5. 调整Dockerfile的COPY顺序优化缓存
当前先复制所有源码再安装依赖,调整顺序以利用Docker缓存,同时避免不必要的镜像层重建:
修改Dockerfile:
# 先复制依赖清单 COPY requirements.txt . RUN --mount=type=cache,target=/root/.cache/pip \ python3 -m pip install -r requirements.txt # 再复制剩余源码 COPY . .
内容的提问来源于stack exchange,提问作者Sidd Menon
相关产品推荐
相关产品推荐

