环境:
centos7
docker镜像的方式安装jenkins,然后在jenkins的pipeline中调用docker命令。
jenkins 安装命令:docker run -it --rm --name myjenkins -p 8083:8080 -p 50000:50000 -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v ~:/var/jenkins_home jenkins/jenkins
docker脚本:
stage('Build') {
docker.image('maven:3.3.3-jdk8').inside('-v ~/.m2/repo:/m2repo') {
sh 'mvn -Dmaven.repo.local=/m2repo clean package'
}
}
错误现象:
Running shell script
+ docker pull maven:3.3.3-jdk8
docker: error while loading shared libraries: /usr/lib/x86_64-linux-gnu/libltdl.so.7: cannot read file data: Error 21
从现象来看,是因为docker需要/usr/lib/x86_64-linux-gnu/libltdl.so.7中的某些文件,但
用ls可以看到/usr/lib/x86_64-linux-gnu/libltdl.so.7是空文件夹,所以报错。但docker本身应该是不依赖libltdl.so.7的,因为宿主机的docker可以正常使用。
这个问题该如何解决?
<p>问题的原因是宿主机没有jenkins镜像需要的libltdl,所以映射也是没有用的。</p>
最后我只能根据网上的文章,制作jenkins镜像,在自定义景象中安装需要的类库。虽然不喜欢,觉得造成了镜像污染,但也没有更好的办法。
https://www.cnblogs.com/leolztang/p/6934694.html
<pre><code>-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7</code></pre>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。