我在Windows 10主机上安装了Docker。
我在Docker中运行Jenkins,并且拥有Dockerized管道。
我想与由dockerized管道生成的DinD容器共享来自主机Windows机器的~/.m2/repository
Maven缓存。
问题是我无法在Windows上正常工作(同样适用于OSX,如下所示)。
所以,我尝试的是:
docker run -v c:/Users/user/.m2/repository:/ repo -v /var/run/docker.sock:/var/run/docker.sock --rm -it docker sh
产生第一个容器,我可以检查ls /repo
是否为空。然后,我尝试执行完全相同的命令来运行DinD
docker run -v c:/Users/user/.m2/repository:/ repo -v /var/run/docker.sock:/var/run/docker.sock --rm -it docker sh
命令失败,并显示:
docker:来自守护程序的错误响应:无效模式:/ repo。
在Windows驱动器名称之后,好像linux的docker不喜欢:
冒号。好的,我可以尝试将c:/
替换为/c/
,然后再次尝试使用相同的命令运行两个docker containerws:
docker run -v /c/Users/user/.m2/repository:/repo -v /var/run/docker.sock:/var/run/docker.sock --rm -it docker sh#执行两个次
现在它开始了,但是只有第一个容器看到非空的/repo
。如何在Windows上解决此问题?这两个容器都看到docker socket /var/run/docker.sock
(docker ps
都起作用),但是Maven缓存第二秒钟是空的/repo
(DinD容器)。
PS:我已经测试过类似的技巧在OSX上可以正常工作:
docker run -v /Users/user/.m2/repository:/repo -v /var/run/docker.sock:/var/run/docker.sock --rm -it docker sh