如何配置Drone Docker插件使用自签名证书访问私有镜像仓库
问题根因
之前的配置存在两个核心认知错误:
- 通过流水线临时卷
docker-cert-persistence写入的证书,仅存在于当前流水线各步骤的独立容器文件系统内,既没有写入宿主机Docker的证书目录,也没有被plugins/docker插件内置的Docker进程正确加载 - 尝试挂载证书到插件容器
/etc/docker/certs.d/路径的操作,对plugins/docker默认的Docker-in-Docker运行模式不生效:插件启动时会先拉起内置的dockerd进程,该进程读取的CA信任存储是容器内的系统CA库,不会读取挂载到临时卷里的证书文件。
可行配置方案(无需开启insecure非安全模式)
以下方案任选其一即可,优先选择第一种,配置成本最低:
方案1:使用插件原生CA证书参数
plugins/docker原生支持自定义CA证书传入,不需要额外加拷贝证书的流水线步骤,直接修改镜像推送步骤的配置即可:
- name: push-built-image image: plugins/docker volumes: - name: host-certs path: /custom-certs settings: repo: docker-registry.scubbo.org:8843/scubbo/blog_nginx tags: built_in_ci debug: true # 指定CA证书路径,插件启动时会自动将证书加入系统信任库 ca: /custom-certs/live/docker-registry.scubbo.org/fullchain.pem
这里直接使用Drone Runner启动时已经挂载的/custom-certs证书目录即可,不需要通过临时卷在步骤间传递文件。
方案2:预构建集成私有CA的自定义插件镜像
如果有多条流水线需要用到该私有仓库,可以提前把CA证书打包进插件镜像,避免每次重复配置:
- 编写Dockerfile:
FROM plugins/docker:latest COPY fullchain.pem /usr/local/share/ca-certificates/registry-ca.crt RUN update-ca-certificates
- 构建自定义镜像推送到可访问的镜像仓库,后续所有推送步骤直接使用这个自定义镜像即可,不需要额外挂载证书或传参。
方案3:使用宿主机Docker模式的配置方式
如果插件配置了daemon: false强制通过挂载的宿主机Docker Socket执行操作,那流水线内的证书拷贝操作完全无效——这种模式下执行镜像推送的是宿主机上的dockerd进程,只需要提前把CA证书放到宿主机的/etc/docker/certs.d/docker-registry.scubbo.org:8843/ca.crt路径下即可,流水线内不需要做任何证书相关操作。
注意事项
- 普通HTTPS单向认证场景下,只需要放置CA证书(即Certbot生成的
fullchain.pem或chain.pem)即可,不需要拷贝privkey.pem、cert.pem这类客户端证书文件,多余配置反而可能触发TLS握手异常。 - 配置完成后重新运行流水线即可正常完成TLS校验,不会再抛出x509未知签发者错误。
内容的提问来源于stack exchange,提问作者scubbo
相关产品推荐
相关产品推荐

