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

非特权模式下Docker-in-Docker连接Docker守护进程问题(BitBucket Pipeline)

BitBucket Pipelines Docker-in-Docker 主机解析错误解决方案

错误原因

你遇到的dial tcp: lookup docker on 100.100.2.136:53: no such host错误,本质是BitBucket Pipelines的step容器无法解析dind服务容器的主机名,加上Atlassian不支持特权模式,常规GitLab CI的dind配置无法直接复用。

解决方案1:直接使用自托管Runner的本地Docker守护进程(推荐)

自托管Runner本身运行在你的服务器上,完全可以直接调用本地的Docker守护进程,不需要额外启动dind服务,既规避了网络解析问题,也无需特权模式。

修改后的bitbucket-pipelines.yml

pipelines:
  default:
      - step:
          name: 'Login'
          runs-on: 
            - 'self.hosted'    
          script:
            # 指向本地Docker套接字
            - export DOCKER_HOST=unix:///var/run/docker.sock
            - echo $ACR_REGISTRY_PASSWORD | docker login -u $ACR_REGISTRY_USERNAME registry-intl.ap-southeast-1.aliyuncs.com --password-stdin 
      - step:
          name: 'Build'
          runs-on: 
            - 'self.hosted'
          script:
            - export DOCKER_HOST=unix:///var/run/docker.sock
            - docker build -t $ACR_REGISTRY:latest .
            # 替换原awk命令,直接使用已构建的镜像标签,更可靠
            - docker tag $ACR_REGISTRY:latest $ACR_REGISTRY:$CI_PIPELINE_ID
            - docker push $ACR_REGISTRY:$CI_PIPELINE_ID      

前置检查

确保自托管Runner的运行用户(默认是bitbucket-runner)已加入docker用户组,拥有访问/var/run/docker.sock的权限:

sudo usermod -aG docker bitbucket-runner

解决方案2:适配BitBucket Pipelines的Dind配置(不推荐)

若坚持使用dind服务,需手动配置网络解析和Docker守护进程参数,但因缺少特权模式,dind运行可能不稳定:

修改bitbucket-pipelines.yml

definitions:
  services:
    docker:
      image: docker:23.0.0-dind
      # 关闭TLS,使用明文TCP端口
      environment:
        - DOCKER_TLS_CERTDIR=
      # 指定dockerd监听所有IP的2375端口
      command: ["dockerd", "-H", "tcp://0.0.0.0:2375"]

pipelines:
  default:
      - step:
          name: 'Login'
          runs-on: 
            - 'self.hosted'    
          services:
            - docker
          script:
            # 手动获取dind容器的IP并设置DOCKER_HOST
            - export DOCKER_HOST=$(getent hosts docker | awk '{print $1}'):2375
            - echo $ACR_REGISTRY_PASSWORD | docker login -u $ACR_REGISTRY_USERNAME registry-intl.ap-southeast-1.aliyuncs.com --password-stdin 
      - step:
          name: 'Build'
          runs-on: 
            - 'self.hosted'
          services:
            - docker
          script:
            - export DOCKER_HOST=$(getent hosts docker | awk '{print $1}'):2375
            - docker build -t $ACR_REGISTRY:latest .
            - docker tag $ACR_REGISTRY:latest $ACR_REGISTRY:$CI_PIPELINE_ID
            - docker push $ACR_REGISTRY:$CI_PIPELINE_ID      

额外优化建议

你的Dockerfile存在两处可优化的问题:

  1. 安装Git方式错误:npm install git安装的是JavaScript版本的Git库,不是系统Git工具,应替换为:
    RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
    
  2. CMD命令逻辑错误:npm run dev与node build/server.ts不能同时作为命令参数,需二选一,比如:
    CMD ["node", "build/server.ts"]
    # 或如果package.json的dev脚本已配置启动命令:
    # CMD ["npm", "run", "dev"]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:35:30