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

BitBucket Pipelines中Dockerfile ADD指令解压tar文件失败求助

BitBucket Pipelines中Dockerfile ADD指令自动解压tar文件的权限映射问题

问题现象

在BitBucket Pipelines的Docker-in-Docker环境下,使用ADD指令自动解压tar文件时出现权限映射错误:

  • 初始使用普通用户打包的tar文件,报错Host ID 1000 cannot be mapped to a container ID
  • 改用root用户重新打包后,报错变为Host ID 0 cannot be mapped to a container ID
  • 流水线执行无失败提示,但镜像中未包含tar解压后的内容,错误仅显示在BitBucket Pipeline的Docker标签页:

time="2025-05-31T02:50:43.655229050Z" level=error msg="Can't add file /var/lib/docker/165536.165536/overlay2/bsicb88a1y0tnk6qgoeyb505k/diff/app/localproxy to tar: Host ID 0 cannot be mapped to a container ID"

  • 本地构建镜像完全正常,仅在BitBucket的Docker-in-Docker场景下触发该问题
  • 希望避免使用COPY+手动解压再删除tar文件的替代方案

相关配置

bitbucket-pipelines.yml

# bitbucket-pipelines.yml
image: 
  name: atlassian/default-image:4

pipelines:
  custom:
    test:
      - step:
          name: build
          script:
            - export DOCKER_BUILDKIT=1
            - docker build -t test .
          services:
            - docker

Dockerfile

# Dockerfile
FROM node:22-bullseye-slim
WORKDIR /app
ADD example.tgz /app

tar文件属性

$ tar -tvf example.tgz
-rwxr-xr-x  0 root   wheel 16988704 Jan 30 16:52 localproxy

解决方法

1. 禁用Docker BuildKit

BitBucket Pipelines的Docker-in-Docker环境默认启用用户命名空间映射(userns-remap),而BuildKit在处理ADD自动解压时存在兼容性问题。移除构建脚本中的DOCKER_BUILDKIT=1环境变量,使用传统构建器即可绕过该问题:

修改后的script部分:

script:
  - docker build -t test .

2. 关闭Docker用户命名空间映射

通过配置Docker服务的启动参数,直接关闭userns-remap功能,消除UID/GID映射冲突:

修改bitbucket-pipelines.yml中的services配置:

services:
  - docker:
      environment:
        DOCKER_OPTS: "--userns-remap=false"

3. 调整tar文件权限打包参数(补充方案)

重新打包tar文件时,明确指定UID/GID并使用--numeric-owner确保权限以数字形式存储,避免用户名解析导致的映射问题:

tar --numeric-owner -cvzf example.tgz --uid=0 --gid=0 localproxy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:16:02