最近在使用Jenkins打包构建Docker Image时,由于公司定义了自己的Base Image,我们构建时Dockerfile中FROM的基础镜像需要从私有Register拉取,所以Jenkins Docker Plugin执行会报Could not build image: pull access denied for xxxx, repository does not exist or may require ‘docker login’ 异常,目前从官方和google上都无法找到相应解决办法。

所以我们换个思路,我们知道Docker 在build image时,如果不跟上–pull 参数,其实构建时会使用已有Image而不会每次都拉取Base Image。所以我们只需要Jenkins能在构建Image之前自动拉取基础镜像就能解决该问题。

一、安装docker-build-step 插件,该插件提供常用docker命令,其中包括pull 命令,注意需要在系统管理->Docker Builder中配置和我们构建Image用的docker为同一个。

二、在具体构建Image任务之前配置Docker Pull我们需要的基础镜像,并且构建Image千万不要勾选Pull base image,这样Docker plugin在执行build image时由于基础镜像已经在docker中下载了,所以就不会再报pull异常。

PS:结果最终在多次设置后发现,这个docker plugin是支持高级模式的,选择高级模式可以设置pull image时从私有Registry拉取:(,之前一直没有发现~~~~