如果可能,应尽可能避免在Docker内部运行Docker(aka dind )。(下面提供了源。)相反,您想为主容器建立一种方式来产生 同级
容器并与之进行通信。
JérômePetazzoni是该功能的作者,该功能使Docker可以在Docker容器中运行,他实际上写了一篇博客文章说不要这样做。他描述的用例与OP的CI
Docker容器的确切用例匹配,该CI容器需要在其他Docker容器中运行作业。
佩塔佐尼列举了导致麻烦的两个原因:
- 它与Linux安全模块(LSM)配合不佳。
- 它会在文件系统中造成不匹配,从而给在父容器内创建的容器带来问题。
他在该博客文章中介绍了以下替代方案,
[最简单的方法是通过将Docker套接字与
-v标志绑定安装,从而将Docker套接字公开给您的CI容器。简而言之,当您启动CI容器(Jenkins或其他)时,不要与Docker-in-Docker一起入侵某些东西,而应使用:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...现在,此容器将可以访问Docker套接字,因此将能够启动容器。除了代替启动“子”容器之外,它将启动“同级”容器。



