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

Bitbucket Pipeline中Docker容器超时崩溃问题求助

Bitbucket Pipeline容器超时崩溃的解决办法

我正在搭建同时使用docker-compose和Semgrep的Bitbucket Pipeline,但在任何含Semgrep的镜像上都无法正常运行Docker。所用基于Semgrep的工具已有容器化版本,尝试全容器方案后,容器运行1分30秒左右就超时崩溃,错误日志如下:

docker run -v $(pwd):/mnt --env "NIGHTVISION_TOKEN=$NIGHTVISION_TOKEN" --add-host=localhost:172.17.0.1 alexnightvision/nightvision-cli nightvision scan -t javaspringvulny-api -a javaspringvulny-api --auth javaspringvulny-api
1m 39s

  • docker run -v $(pwd):/mnt --env "NIGHTVISION_TOKEN=$NIGHTVISION_TOKEN" --add-host=localhost:172.17.0.1 alexnightvision/nightvision-cli nightvision scan -t javaspringvulny-api -a javaspringvulny-api --auth javaspringvulny-api
    [2024-04-15 15:30:51] INFO Launching NightVision CLI
    [2024-04-15 15:30:53] INFO Starting an OpenAPI Scan
    [2024-04-15 15:30:55] INFO Assigned relay ID relayId=NV0RLY01HVH63YPHW3MZ1H4WYZTR2RJM
    46950926-7c99-497f-ad68-849495288607
    [2024-04-15 15:30:56] INFO Scan initiated 🚀
    [2024-04-15 15:30:56] INFO Scan Details:
    info=
    │ Login Status: PENDING
    │ Status: RUNNING
    │ Progress: 0.00%
    [2024-04-15 15:31:01] INFO Scanning in progress
    ...(中间扫描日志省略)
    [2024-04-15 15:32:29] INFO Scanning in progress
    time="2024-04-15T15:32:30Z" level=error msg="error waiting for container: unexpected EOF"

解决方向

1. 延长Pipeline步骤超时时间

Bitbucket Pipeline单步默认超时10分钟,若扫描任务本身耗时较长,或资源不足导致进程变慢,可在bitbucket-pipelines.yml中为对应步骤设置更长超时:

pipelines:
  default:
    - step:
        name: NightVision扫描
        script:
          - docker run ... # 你的容器命令
        timeout: 30 # 单位为分钟,按需调整

2. 增加Pipeline资源配额

Bitbucket Runner默认CPU和内存有限,若扫描任务资源占用高,容器可能因资源不足被强制终止。可在步骤中配置更多资源:

pipelines:
  default:
    - step:
        name: NightVision扫描
        script:
          - docker run ...
        resources:
          cpu: 2 # 分配2核CPU
          memory: 4096 # 分配4GB内存

3. 修复Docker嵌套运行的权限问题

若Semgrep镜像未正确配置Docker权限,会导致容器内Docker命令执行异常。可:

  • 使用Bitbucket官方镜像(如atlassian/default-image:3)作为基础镜像,该镜像已配置好Docker运行环境
  • 在步骤中启用Docker服务:
pipelines:
  default:
    - step:
        name: NightVision扫描
        services:
          - docker
        script:
          - docker run ...

4. 排查容器输出流中断问题

unexpected EOF错误常因容器进程输出流中断导致,可尝试:

  • 在docker run命令中添加-t参数分配伪终端,或--log-driver json-file指定日志驱动
  • 将容器日志重定向到文件,排查异常输出:
docker run ... > scan.log 2>&1
cat scan.log

5. 放弃嵌套容器,直接安装工具

若全容器方案问题过多,可直接在Pipeline步骤中安装Semgrep和NightVision CLI,避免Docker嵌套的复杂性:

pipelines:
  default:
    - step:
        name: Semgrep+NightVision扫描
        image: python:3.11
        script:
          - pip install semgrep nightvision-cli
          - nightvision scan -t javaspringvulny-api -a javaspringvulny-api --auth javaspringvulny-api

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:24:53