我正在运行一个Jenkins集群,其中在Master和Slave中,它们都作为Docker容器运行。
主机是在MacOS上运行的最新的boot2docker VM。
为了使Jenkins能够使用Docker执行部署,我将docker.sock和docker客户端从主机安装到Jenkins容器,如下所示:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v $HOST_JENKINS_DATA_DIRECTORY/jenkins_data:/var/jenkins_home -v $HOST_SSH_KEYS_DIRECTORY/.ssh/:/var/jenkins_home/.ssh/ -p 8080:8080 jenkins
在将卷装载到Jenkins容器中运行的Docker容器时,我遇到了问题。例如,如果需要在Jenkins容器内运行另一个Container,请执行以下操作:
sudo docker run -v $JENKINS_CONTAINER/deploy.json:/root/deploy.json $CONTAINER_REPO/$CONTAINER_IMAGE
上面的代码运行容器,但是文件“ deploy.json”不是作为文件挂载,而是作为“目录”挂载。即使将目录安装为卷,也无法查看结果容器中的文件。
这是一个问题吗,因为在Docker情况下由于Docker而产生文件权限?
Docker容器中的Docker容器使用父HOST的Docker守护程序,因此,在“ docker-in- docker”案例中安装的任何卷仍从HOST而非容器中引用。
因此,在主机中从Jenkins容器安装的实际路径“不存在”。因此,将在空的“ docker-in- docker”容器中创建一个新目录。将目录装载到Container内的新Docker容器时,同样适用。
我错过了非常基本和显而易见的东西,但是我一输入问题就意识到了。