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

Posted 鸿爪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让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

以上是关于如何让docker container里既能使用systemctl,又可以使用docker的主要内容,如果未能解决你的问题,请参考以下文章

输入docker ps 报错信息处理Get http:///var/run/docker.sock/v1.19/containers/json: dial unix /var/run/docker.s

docker笔记-docker-container

如何让 /etc/profile 在 Alpine / Docker 中自动运行

如何登录到Docker的container中

docker container如何支持日志rotate

docker基础学习