我是码头工人的新手.我只是尝试在我的本地机器(Ubuntu 16.04)中使用docker和Jenkins.
我使用下面的管道脚本配置了一个新作业.
node {
stage('Build') {
docker.image('maven:3.3.3').inside {
sh 'mvn --version'
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它失败并出现以下错误.
我试图在运行jenkins docker容器(jenkins:latest)内部运行Docker for Mac 17.06.0-ce-mac17的OSX主机上调用docker,按照http://jpetazzo.github.io/中描述的过程2015/09/03/do-not-use-docker-in-docker-for-ci /.
我将/var/run/docker.sock挂载到容器中,我在其中粘贴了一个ubuntu docker二进制文件,并且它能够执行 - 但是当我运行例如"docker ps"时,从用户"jenkins"的容器内部我得到
在尝试连接到unix上的Docker守护程序套接字时获得权限被拒绝:///var/run/docker.sock:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json?all = 1:拨打unix /var/run/docker.sock:connect:权限被拒绝.
如果我以root身份连接到容器(docker exec -u 0),它可以工作.
我需要jenkins用户才能运行它.我尝试添加一个docker组并在ubuntu容器中添加jenkins,但这没有帮助,因为它与外部无关,而Docker for Mac无法像在Linux上运行这样做,你可以做半容易uid/gid匹配.我想发布这个容器,所以对我的Docker for Mac安装的部分内容进行修复并不能帮助我.如果我能帮助它,我宁愿不以root身份运行整个jenkins设置.(我也试过运行容器作为特权,但没有帮助.)
根据Permission Denied中的建议,在Macbook中运行Jenkins管道时尝试连接到Docker守护程序时,我手动将容器内的/var/run/docker.sock文件与jenkins联系起来,现在jenkins可以运行docker.但是我无法想出一个可分发容器的解决方案 - 我不能在Dockerfile中做这个,因为该文件还不存在,并且填入入口点没有帮助,因为它作为jenkins运行.
为了构建和运行一个图像,我需要做什么才能在容器内部以非root用户身份在Mac上运行外部docker容器?