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

如何在Drone CI流水线中拉取私有Docker Registry镜像?

在Drone 1.x中配置私有Docker镜像仓库

当然可以给Drone配置私有Docker镜像仓库,针对你的Drone 1.0.0版本,我整理了两种常用的配置方式,覆盖全局和单流水线场景,还有自签名证书的特殊处理:

一、全局私有仓库配置(所有流水线通用)

如果你的所有流水线都需要访问同一个私有仓库,推荐通过Drone服务器和代理的环境变量全局配置,这样所有代理节点都会自动使用凭证拉取镜像:

  1. 编辑你的Docker Compose配置文件(比如docker-compose.yml),在drone-server和所有drone-agent的environment节点中添加以下变量:
    environment:
      # 私有仓库地址
      - DRONE_REGISTRY_PLUGIN_ENDPOINT=https://private-registry.example.com
      # 仓库账号密码
      - DRONE_REGISTRY_PLUGIN_USERNAME=your-registry-username
      - DRONE_REGISTRY_PLUGIN_PASSWORD=your-registry-password
      # 如果是自签名证书的仓库,设为true允许不安全连接
      - DRONE_REGISTRY_PLUGIN_INSECURE=false
    
  2. 重启Drone服务使配置生效:
    docker-compose down && docker-compose up -d
    

配置完成后,所有流水线步骤中的私有镜像都会自动用这些凭证拉取,无需在每个流水线里重复配置。

二、单流水线私有仓库配置(仅针对特定项目)

如果只有部分流水线需要访问私有仓库,可以通过流水线配置文件结合Drone Secret实现:

  1. 在Drone Web界面中添加私有仓库凭证:
    • 进入目标项目仓库,点击「Settings」→「Secrets」→「Add Secret」
    • 填写Secret名称(比如REGISTRY_CREDS),值为本地Docker登录后生成的config.json内容。你可以在本地执行docker login private-registry.example.com,然后复制~/.docker/config.json里的完整内容作为Secret值。
  2. 在流水线配置文件中添加image_pull_secrets字段:
    kind: pipeline
    name: integration
    # 指定用于拉取私有镜像的Secret
    image_pull_secrets:
      - REGISTRY_CREDS
    steps:
    - name: tests
      image: private-registry.example.com/nodejs/special
      commands:
      - npm i
      - npm run test
    when:
      event:
      - push
      - pull_request
    

这样这个流水线就会使用你配置的Secret凭证拉取指定私有镜像了。

三、自签名证书私有仓库的额外处理

如果你的私有仓库使用自签名SSL证书,除了上述配置,还需要让代理节点信任该证书:

  1. 对于物理机上的代理节点:
    # 创建证书目录
    mkdir -p /etc/docker/certs.d/private-registry.example.com/
    # 复制自签名证书到目录,命名为ca.crt
    cp your-certificate.crt /etc/docker/certs.d/private-registry.example.com/ca.crt
    # 重启Docker服务
    systemctl restart docker
    
  2. 如果代理是通过Docker Compose运行的,可以挂载证书到容器内:
    services:
      drone-agent:
        image: drone/agent:1.0.0
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          # 挂载本地证书到容器指定目录
          - ./your-certificate.crt:/etc/docker/certs.d/private-registry.example.com/ca.crt
        # 其他环境变量配置...
    

补充说明

你提到的旧版CLI的registry命令确实在Drone 1.x中被移除了,现在的标准配置方式就是上面的全局环境变量或流水线级Secret。官方文档里的提示虽然简略,但核心逻辑就是这两种实现方式。

另外,如果你的流水线需要推送镜像到私有仓库,可以使用docker或docker:dind插件,通过Secret传入凭证,示例配置如下:

steps:
- name: push-image
  image: plugins/docker
  settings:
    registry: private-registry.example.com
    repo: private-registry.example.com/my-app
    username:
      from_secret: REGISTRY_USER
    password:
      from_secret: REGISTRY_PASS
    tags: latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:42:48