我可以在不使用–privileged标志的情况下运行Docker-in-Docker

我想使用Docker-in-Docker,但是 – 特权提供了一揽子访问设备。 有没有办法使用卷和cap-add等组合来运行这个?

不幸的是,你必须使用--privileged标志在Docker中运行Docker,你可以看看官方公告 ,他们声明这是--privileged标志的许多用途之一。

基本上,您需要更多的访问主机系统设备才能运行--privileged而不是在没有--privileged情况下--privileged

是的,你可以在没有--privileged标志的--privileged运行--privileged 。 它涉及将dockersockets安装到容器上,如下所示:

  docker run -it -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \ alpine docker ps -a 

这就是将docker socket和可执行文件安装到容器中,并在高山容器中运行docker ps -a 。 JérômePetazzoni创作了这个后代的示例,并且在--privileged标志上做了很多工作,对--privileged有这样的评价:

https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

我一直在使用这种方法一段时间,它工作得很好。

这种方法的警告是事情与存储时髦。 最好使用数据卷容器或命名数据卷而不是挂载目录。 由于您使用的是主机上的docker套接字,因此您要在子容器中装入的任何目录都必须来自主机的上下文,而不是父容器。 它变得奇怪。 数据量容器的运气更好。