如何让docker container里既能使用systemctl,又可以使用docker

鸿爪

最近因为工作需要,开始研究如何在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

阅读 1.9k
1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
文章目录
宣传栏