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

在Bitbucket Pipeline中运行Compose报错:--privileged=true不被允许

问题描述

在Bitbucket Pipelines中使用Docker Compose结合BuildKit构建镜像时,触发权限错误:

#1 [internal] booting buildkit
#1 pulling image moby/buildkit:buildx-stable-1
#1 pulling image moby/buildkit:buildx-stable-1 3.1s done
#1 creating container buildx_buildkit_default done
#1 ERROR: Error response from daemon: authorization denied by plugin pipelines: --privileged=true is not allowed
------
 > [internal] booting buildkit:
------
Error response from daemon: authorization denied by plugin pipelines: --privileged=true is not allowed

已确认:

  • 仅在开启DOCKER_BUILDKIT=1时触发,无论使用docker compose还是docker-compose命令
  • 未挂载超出允许范围的路径,仅使用BITBUCKET_CLONE_DIR
  • Compose文件已尝试添加privileged: false配置,无效

相关配置:

Compose文件

version: "3.9"
services:
  myservice:
    platform: linux/amd64
    privileged: false
    image: someimage
    build:
      context: .
      dockerfile: "Dockerfile"
      secrets:
        - pypi_conf

secrets:
  pypi_conf:
    file: "${BITBUCKET_CLONE_DIR}/pypi_config/pip/pip.conf"

Bitbucket Pipelines配置

image: atlassian/default-image:3

definitions:
  services:
    docker:
      memory: 3072
  steps:
    - step: &build
        name: Build
        image:
          name: tiangolo/docker-with-compose
        script:
          - export DOCKER_BUILDKIT=1
          - docker compose build
        services:
          - docker
pipelines:
  default:
    - step: *build
  branches:
    master:
      - step: *build
解决方案

方案1:禁用BuildKit(最简单)

如果不需要BuildKit的特性(如并行构建、缓存优化等),直接移除export DOCKER_BUILDKIT=1这一行,使用传统Docker构建方式即可避开该问题。

修改后的script部分:

- docker compose build

方案2:手动启动非特权BuildKit容器

Bitbucket Pipelines禁止使用--privileged参数的容器,而默认BuildKit启动时会自动添加该参数。可以手动启动一个非特权的BuildKit实例,然后让Compose使用它:

更新Pipelines的script步骤:

# 启动非特权BuildKit容器
docker run -d --name buildkitd -p 1234:1234 moby/buildkit:buildx-stable-1 \
  buildkitd --addr tcp://0.0.0.0:1234 --oci-worker-no-process-sandbox

# 指定BuildKit连接地址并开启BuildKit
export DOCKER_BUILDKIT=1
export BUILDKIT_HOST=tcp://localhost:1234

# 执行Compose构建
docker compose build

说明:

  • --oci-worker-no-process-sandbox参数让BuildKit在非特权模式下运行,避免需要privileged权限
  • 通过BUILDKIT_HOST指定手动启动的BuildKit容器,替代默认自动创建的privileged容器

方案3:更换Docker服务镜像

尝试将Pipelines定义中的docker服务替换为官方的docker:24-dind镜像,部分场景下可以解决权限限制问题:

修改definitions部分:

definitions:
  services:
    docker:
      image: docker:24-dind
      memory: 3072
      options: "--storage-driver=overlay2"
注意事项
  • 确保BITBUCKET_CLONE_DIR下的pypi_config/pip/pip.conf路径存在,避免secrets加载失败
  • 如果使用方案2,可添加docker logs buildkitd验证容器启动状态,确保服务正常后再执行构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:15:39