【发布时间】:2020-05-03 12:28:06
【问题描述】:
我正在编写一个 Jenkins 管道,旨在从私有注册表中提取 docker 映像。目前我在启动 docker pull 命令时遇到问题,因为从 Jenkins 启动时它会失败。
目前,Jenkins 管道的工作方式如下:
- 从用户那里获取一组参数(即:图像名称和标签)
- 启动一个单独的 bash 脚本来执行拉取操作。
bash 脚本执行两个操作:
通过以下方式登录注册表:
echo $pwd | docker login -u$username --password-stdin $registryUrl通过命令拉取图片:
docker pull $image:$tag
登录命令成功,而拉取命令回复:
Error response from daemon: access denied:
no access to Image Load, on collection swarm
乍一看,我认为这是用户权限的问题,但是在 Jenkins 上下文之外运行 bash 脚本(作为 jenkins 进程的所有者)它可以工作。
我是否缺少任何配置?作为替代方案,我尝试使用 Docker Jenkins 插件 API 实现 Jenkins 管道,但也失败了。
最后说明
Jenkins 进程的所有者与登录 Docker 私有注册表的用户不同。这会影响行为吗?
操作系统:
macOS 10.14.6
Docker 版本详情:
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf5
Built: Thu Oct 17 23:44:48 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.4
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: 9013bf5
Built: Thu Oct 17 23:50:38 2019
OS/Arch: linux/amd64
【问题讨论】:
标签: bash docker jenkins jenkins-pipeline