最近因为工作须要,开始钻研如何在docker里部署编译打包环境,该环境须要可能应用systemctl和docker性能。

对于如何应用systemctl,曾经有文章提到了:
https://developers.redhat.com...
下面是2014年的文章,作者最近的更新在
https://developers.redhat.com...
总之就是须要做一些配置,而后启动container的时候运行CMD /usr/sbin/init

至于如何在docker container外部运行docker,网上的文章一搜一大片,
正如它们所言,通常只须要把host上的 /var/run/docker.sock 通过bind mount形式挂载到 containter 外部的 /var/run/docker.sock 就能够了。其原理是和host共享一个docker daemon服务。

所以我就在启动container的时候同时指定了 /usr/sbin/init 和挂载host 的 /var/run/docker.sock。
神奇的事件产生了,container外部/var/run门路下齐全没有 docker.sock 的踪影。

折腾了一大圈,才在github上找到了一个相干的探讨
https://github.com/ansible-co...
外面有集体剖析说,应该是使能systemctl会使得挂载完 /var/run/docker.sock 之后又在雷同地位mount 了一个tmpfs,导致先前挂载的文件都看不见了。

所以外面的人举荐了一个workaround:把host的/var/run/docker.sock 先挂载到一个其余地位,保障不会被笼罩掉,随后再到container的/var/run里去做一个symbol link,链接到挂载进来的docker.sock,这样就能够工作了。
具体的内容还是去读原帖吧 :D