在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
相关产品推荐
相关产品推荐

