atlassian/pipelines-docker-daemondocker-in-docker-bitbucket-pipelines 是专为 Bitbucket Pipelines 设计的 Docker-in-Docker (DinD) 镜像,旨在提供容器内独立的 Docker 运行环境。该镜像集成 Docker 引擎与 CLI 工具,允许在 Bitbucket CI/CD 流水线中直接执行 Docker 命令,无需依赖宿主机 Docker 环境。
解决 Bitbucket Pipelines 原生环境中缺乏 Docker 守护进程的限制,支持在流水线中完成 Docker 镜像构建、容器运行、镜像推送等操作,无缝衔接容器化应用的自动化构建与部署流程。
docker build、docker run、docker push 等所有标准命令。docker:dind 镜像构建,镜像体积小,启动速度快。docker buildx 实现跨平台镜像构建或多阶段构建(如编译阶段→运行阶段分离)。在 bitbucket-pipelines.yml 中通过 services 配置引入该镜像,作为独立服务提供 Docker 守护进程,主构建容器通过网络连接使用其服务。
yamlimage: docker:latest # 主构建容器使用 Docker CLI 镜像 pipelines: default: - step: name: "Build and push Docker image" services: - docker # 引入 DinD 服务(此处需替换为实际镜像名,如 your-registry/docker-in-docker-bitbucket-pipelines:latest) script: # 1. 登录 Bitbucket 容器仓库(使用 Bitbucket 内置环境变量) - docker login -u $BITBUCKET_REGISTRY_USER -p $BITBUCKET_REGISTRY_PASSWORD $BITBUCKET_REGISTRY # 2. 构建镜像(标签格式:仓库地址/项目名/镜像名:提交哈希) - docker build -t $BITBUCKET_REGISTRY/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT . # 3. 推送镜像至仓库 - docker push $BITBUCKET_REGISTRY/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT caches: - docker # 缓存 Docker 层,加速后续构建
yamlimage: docker:latest pipelines: branches: main: - step: name: "Build, test and push production image" services: - docker script: # 构建测试镜像 - docker build --target test -t app-test . # 运行容器并执行测试 - docker run --rm app-test npm run test # 构建生产镜像 - docker build --target production -t $BITBUCKET_REGISTRY/app-prod:$BITBUCKET_COMMIT . # 推送生产镜像 - docker push $BITBUCKET_REGISTRY/app-prod:$BITBUCKET_COMMIT
如需在本地复现 Bitbucket Pipelines 环境,可通过 docker run 命令直接启动镜像:
bash# 启动 DinD 容器(需特权模式) docker run -d \ --privileged \ --name bitbucket-dind \ -e DOCKER_TLS_CERTDIR=/certs \ # 启用 TLS 加密 -v dind-certs:/certs/client \ # 挂载证书卷(持久化 TLS 证书) your-registry/docker-in-docker-bitbucket-pipelines:latest # 启动客户端容器,连接 DinD 服务 docker run -it \ --link bitbucket-dind:docker \ # 链接 DinD 容器 -e DOCKER_HOST=tcp://docker:2376 \ # 指定 Docker 守护进程地址 -e DOCKER_TLS_VERIFY=1 \ # 启用 TLS 验证 -e DOCKER_CERT_PATH=/certs/client \ # 指定证书路径 -v dind-certs:/certs/client \ # 挂载共享证书卷 docker:latest \ sh # 进入客户端容器执行 Docker 命令
| 变量名 | 描述 | 默认值 |
|---|---|---|
DOCKER_HOST | Docker 守护进程地址(供客户端连接) | tcp://localhost:2376 |
DOCKER_TLS_CERTDIR | TLS 证书存储目录(为空时禁用 TLS) | /etc/docker/tls |
DOCKER_DRIVER | Docker 存储驱动(如 overlay2、devicemapper) | overlay2 |
DOCKER_OPTS | 传递给 Docker 守护进程的额外参数(如 --log-level=info、--debug) | 空 |
BITBUCKET_REGISTRY | Bitbucket 容器仓库地址(用于镜像推送,可通过 Bitbucket 内置变量获取) | [***] |
BITBUCKET_REGISTRY_USER:Bitbucket 容器仓库登录用户名(通常为 $BITBUCKET_USERNAME)。BITBUCKET_REGISTRY_PASSWORD:Bitbucket 容器仓库登录密码(需在 Bitbucket 项目设置→Repository variables 中配置为 Secured 类型)。--privileged)下运行,以确保 Docker 引擎能访问宿主机内核功能(如挂载、网络栈)。caches: [docker] 配置缓存 Docker 层,可显著减少重复构建时间。manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务