从容器内部控制Docker是否可行?

时间:2014-01-07 21:31:29

标签: docker

我已经尝试将我的站点部署脚本打包在Docker容器中。我的想法是,我的服务都将在容器内,然后使用特殊管理容器来管理其他容器。

这个想法是我的主机应该尽可能愚蠢(目前我使用CoreOS,唯一的状态是启动我的管理容器的systemd配置)。

管理容器用作推送目标,用于根据我发送给它的源代码创建新容器(我认为,使用SSH,至少这是我现在使用的)。该脚本还在一个单独的容器中管理持久性数据(数据库文件,日志等)并管理它的备份,以便我可以拆除并重建所有内容,而无需接触任何数据。为了实现这一点,我在启动管理容器时使用-v选项转发Docker Unix套接字。

这是好主意还是坏主意?这样做会遇到问题吗?我没有在任何地方看到它被劝阻,但我也没有找到很多其他人这样做的例子。

2 个答案:

答案 0 :(得分:6)

这完全没问题,你不是唯一一个这样做的人: - )

另一个使用示例是使用管理容器来进行Docker REST API的身份验证。它将接受EXPOSE的TCP端口上的连接,该端口本身是用-p发布的,并且是对UNIX套接字的代理请求。

答案 1 :(得分:2)

由于这个问题在今天仍然很重要,我想更详细地回答:

可能可以使用此设置,将docker套接字传递到运行的容器中。这可以通过许多解决方案来完成,并且效果很好。但是您必须考虑与此相关的问题:

  1. 如果要使用套接字,则必须是容器内部的root用户。这允许在容器内执行 any 命令。因此,例如,如果入侵者控制了该容器,则他将控制所有其他docker容器。
  2. 如果将套接字暴露给jpetzzo认为带有TCP端口的端口,您将遇到同样的问题,甚至更糟,因为现在您甚至不必破坏容器,而只需破坏网络。如果您过滤连接(如他的评论中提到的那样),则第一个问题仍然存在。

TLDR;

可以做到这一点,它将起作用,但是随后您需要考虑一下安全性。