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

Bitbucket CI/CD中使用Docker BuildKit与--mount时报HTTPS请求错误

在Bitbucket CI/CD中使用Docker BuildKit与--mount缓存PNPM依赖时遇到HTTPS请求错误

问题描述

我在Bitbucket CI/CD流水线中尝试通过DOCKER_BUILDKIT=1结合Docker --mount标记,为依赖PNPM的应用做容器构建缓存优化,遇到了报错。已设置环境变量DOCKER_BUILDKIT=1启用BuildKit特性,但流水线运行时抛出以下错误:

#4 ERROR: failed to do request: Head "https://10.61.202.23:5000/v2/library/node/manifests/18.17?ns=docker.io": http: server gave HTTP response to HTTPS client

[internal] load metadata for docker.io/library/node:18.17:


failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://10.61.202.23:5000/v2/library/node/manifests/18.17?ns=docker.io": http: server gave HTTP response to HTTPS client

涉及的Dockerfile构建片段:

FROM node:18.17 as build
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
WORKDIR /opt/app
COPY ./package.json ./pnpm-lock.yaml ./.npmrc ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile --prod
COPY ./ .
RUN pnpm build

本地用相同的DOCKER_BUILDKIT=1和--mount标记构建完全正常,仅在Bitbucket流水线中出现该错误。需要明确问题原因及解决方法,实现流水线中带缓存优化的镜像构建。

问题原因

核心原因是Bitbucket流水线环境配置了HTTP协议的私有镜像仓库,但BuildKit默认强制使用HTTPS访问镜像仓库。本地构建正常是因为你的本地Docker已配置信任该私有仓库的HTTP访问,或者本地未走这个私有镜像代理。

从错误信息可看出,Bitbucket的Docker环境将docker.io/library/node:18.17的请求转发到了10.61.202.23:5000这个私有仓库,但该仓库仅支持HTTP,BuildKit默认的HTTPS访问逻辑与仓库的HTTP响应不兼容,导致报错。

解决方法

1. 配置BuildKit信任私有仓库的HTTP访问

在Bitbucket流水线的构建步骤中,需要让Docker允许该私有仓库的HTTP不安全访问:

  • 如果使用Bitbucket自带的Docker服务,可在bitbucket-pipelines.yml中修改Docker daemon配置:
pipelines:
  default:
    - step:
        name: Build Docker Image with BuildKit
        services:
          - docker
        script:
          - |
            echo '{"insecure-registries": ["10.61.202.23:5000"]}' > /etc/docker/daemon.json
            systemctl restart docker
          - export DOCKER_BUILDKIT=1
          - docker build -t your-image-name .
  • 若流水线环境不允许修改daemon.json,可通过BUILDKIT_CONFIG环境变量直接指定配置:
export BUILDKIT_CONFIG='{"registry": {"mirrors": {"docker.io": {"endpoint": ["http://10.61.202.23:5000"]}},"configs": {"10.61.202.23:5000": {"tls": false}}}}'
export DOCKER_BUILDKIT=1
docker build -t your-image-name .

2. 校验Bitbucket流水线的镜像源配置

检查Bitbucket流水线是否默认配置了内部镜像代理,确认代理仓库的协议类型。如果只能使用HTTP,必须确保BuildKit已明确信任该仓库的HTTP访问规则。

3. 确保BuildKit缓存在流水线中生效

解决仓库访问问题后,需保证--mount=type=cache的PNPM缓存能跨构建保留:
利用Bitbucket的Pipeline Cache功能配合BuildKit缓存,在bitbucket-pipelines.yml中添加缓存配置:

pipelines:
  default:
    - step:
        name: Build with cached PNPM store
        services:
          - docker
        caches:
          - docker
          - pnpm-store
        script:
          - export DOCKER_BUILDKIT=1
          - docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t your-image-name .
definitions:
  caches:
    pnpm-store: /pnpm/store

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:05:02