Jenkins容器内Trivy无法访问本地Docker镜像的问题咨询
解决Jenkins容器内Trivy访问宿主机本地Docker镜像的问题
下面是几种可行的解决办法:
1. 共享宿主机Docker套接字给Jenkins容器
让Jenkins容器直接使用宿主机的Docker引擎,这样Trivy就能通过Docker引擎访问宿主机上的本地镜像,这是最常用的方案。
- 启动Jenkins容器时添加挂载参数(如果容器已运行,可先停止再重新启动):
docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -v jenkins_home:/var/jenkins_home \ jenkins/jenkins:lts - 权限处理:默认Jenkins容器内用户可能没有访问Docker套接字的权限,可在容器内执行
chmod 666 /var/run/docker.sock;若追求更安全的方式,可将Jenkins用户加入宿主机的docker用户组,避免过度开放权限
2. 手动导入镜像到Jenkins容器
如果不想共享Docker套接字,可以把宿主机的本地镜像导出后导入Jenkins容器:
- 宿主机上导出镜像:
docker save -o test-image.tar test:test - 将tar文件复制到Jenkins容器内(替换
<jenkins-container-id>为你的Jenkins容器ID):docker cp test-image.tar <jenkins-container-id>:/tmp/ - 进入Jenkins容器导入镜像:
docker exec -it <jenkins-container-id> bash docker load -i /tmp/test-image.tar - 完成后就能在CI流水线里用Trivy扫描
test:test镜像了
3. 搭建本地镜像仓库中转
搭建一个本地Docker镜像仓库,把宿主机的镜像推送到仓库,再让Jenkins容器从仓库拉取镜像扫描:
- 启动本地镜像仓库:
docker run -d -p 5000:5000 --name registry registry:2 - 宿主机给镜像打标签并推送到本地仓库:
docker tag test:test localhost:5000/test:test docker push localhost:5000/test:test - Jenkins容器内拉取镜像并扫描:
docker pull localhost:5000/test:test trivy image localhost:5000/test:test
内容的提问来源于stack exchange,提问作者Lev Meshorer
相关产品推荐
相关产品推荐

