踩坑日记(一)---Docker in Docker

496 阅读1分钟

背景:使用Docker启动的Jekins进行Docker镜像构建

Jenkins构建镜像命令:

docker run -i -v "$PWD":/usr/src/myapp -w /usr/src/myapp node:lts /bin/bash -c 'ls && npm install && npm run build'

Jenkins启动命令

docker run -it -p 8089:8080 -p 50001:50000 -v /data/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock superbin/jenkins-docker /bin/bash

Jenkins构建结果失败了,什么?竟然什么文件都没有

先进入容器内部看看文件存不存在,结果竟然显示文件是存在的。

再去执行Jekins构建命令看看,结果显示不存在。

一开始以为是文件权限问题导致,查了半天,发现是docker挂载文件的问题。挂载宿主机的文件夹看看,果然可以。

结论:Docker的-v挂载命令,感觉可能只是作了文件映射(没看底层实现),所以当Docker容器运行了另一个Docker容器时,二次挂载应该挂载宿主机的文件目录。

解决办法:直接在宿主机做个软链吧,机智如我

ln -s /data/jenkins/ /var/jenkins_home

最后看看Jenkins的构建结果吧。nice,终于成功了

结尾:介于linux渣渣的截图功能,图片随便看看吧。轻喷!