通过docker容器访问主机

时间:2017-08-03 02:46:30

标签: docker

如何通过从docker容器运行命令来访问主机?我需要访问主机,以便检查我的docker容器和图像的空间使用情况。

3 个答案:

答案 0 :(得分:2)

如果您希望有一个运行任务的容器来监控您的Docker主机系统使用情况等等,那么您应该看一下https://prometheus.io/ https://github.com/prometheus/node_exporter

节点导出器容器从挂载的Docker主机获取procfs和sysfs,因此能够监视主机指标。

  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \

答案 1 :(得分:2)

这个问题基本上是一个"如何从docker容器的主机中获取数据"。

与Paul所说的一样,docker容器是用于运行与主机环境隔离的应用程序的独立环境。

与虚拟机类似但更轻量级。因此,容器无意直接向主机执行shell命令。

我想这也是出于安全考虑而设计的,因为你不希望恶意容器在主机上执行恶意命令,比如格式化磁盘。

回到问题。

从根本上说,这些是容器可以从其主机访问数据的标准方式;

  1. Unix域套接字
  2. 网络套接字,例如Restful或Web服务
  3. Unix域套接字:

    这个想法是让主机上的进程充当服务器以监听Unix domain socket。然后容器将有一个客户端进程从其服务器请求资源。在这种情况下,资源可以是asking about diskspace

    此方法要求*.sock套接字文件的文件路径在主机和容器之间可见,这可以通过使用docker volume命令来实现。

    优势: 解决方案是可扩展的,因为您可以在构建客户端 - 服务器程序后添加不同类型的请求。

    缺点 可能需要一些时间来构建应用程序。如果你问我,有点矫枉过正。

    音量方式

    您将filepath从主机挂载到容器。然后创建一个快速而脏的shell脚本,将df的结果写入文件并将其放在共享目录区域中。

    然后在容器中,您将有另一个cron作业来不断地运行程序/脚本parse df结果,然后执行您需要做的任何事情。

    优势:
    不像以前的解决方案那么昂贵,因为您不必编写小程序来读写输出。

    缺点: 可能是凌乱或不可能扩展此解决方案以服务于不同类型的资源。例如。从主机shell运行程序。

    RESTFUL / Web服务方式

    unix domain socket方法非常相似,但你在这里谈论HTTP。您仍然以不同的方式编写客户端/服务器程序。然而,它比第一个策略更麻烦,因为您需要额外的步骤来查找docker0网络接口的IP地址。这样您就知道容器如何连接到host

    优势: 扩展。 您可以使用此程序来控制部署REST服务器的任何远程主机。

    缺点: 开发费用昂贵。对你的用例来说可能超级矫枉过正。

    <强>结论

    我可能只是采用docker volume方式。

    有一个cron作业来运行一个简单的shell脚本来运行df,处理它的输出并写下&#34; TRUE&#34;或者&#34; FALSE&#34;该文件的关键字。

    然后在容器中有另一个shell脚本到cat该文件,以确定在预期关键字时是否触发其他脚本。

答案 2 :(得分:1)

如果在容器中安装ssh客户端,并在主机上安装sshd服务器,则可以从容器ssh到主机以执行命令。为避免输入密码,例如要自动运行脚本,请使用ssh密钥。

据我所知,docker没有提供从容器中执行主机上下文命令的方法。 docker的重点是包含容器,而不是让它们在主机上执行命令。

相反更容易。您可以使用docker exec

从主机输入容器上下文