通过docker容器访问主机

通过docker容器访问主机,docker,Docker,如何通过从docker容器运行命令来访问主机?我需要访问主机,以便检查docker容器和映像的空间使用情况。如果在容器中安装ssh客户端,并在主机上安装ssh服务器,则可以通过ssh从容器到主机执行命令。要避免键入密码,例如自动运行脚本,请使用ssh密钥 据我所知,docker没有提供从容器在主机上下文中执行命令的方法。docker的全部目的是包含容器,而不是让它们在主机上执行命令 相反更容易。您可以使用docker exec从主机输入容器上下文。如果您希望有一个正在运行任务的容器来监视dock

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

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

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


相反更容易。您可以使用docker exec从主机输入容器上下文。如果您希望有一个正在运行任务的容器来监视docker主机系统的使用情况等,您应该使用查看

节点导出器容器从装载的Docker主机获取procfs和sysfs,因此能够监视主机度量

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

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

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

与虚拟机类似,但更轻量级。因此,容器并不意味着具有直接向主机执行shell命令的能力

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

回到问题上来

基本上,这些都是容器从其主机访问数据的标准方式

Unix域套接字 体积 网络套接字,例如Restful或Web服务 Unix域套接字:

这个想法是让一个进程作为服务器在主机上运行,以侦听Unix域套接字。然后容器将有一个客户端进程从其服务器请求资源。在这种情况下,资源可以询问磁盘空间

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

优点: 解决方案是可扩展的,因为一旦构建了客户机-服务器程序,就可以添加不同类型的请求

劣势 构建应用程序可能需要一些时间。如果你问我的话,有点过分了

体积法

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

然后在容器中,您将有另一个cron作业来不断地运行程序/脚本,以解析df结果,并在之后执行您需要执行的任何操作

优点: 不像以前的解决方案那样昂贵,因为您不必编写小程序来读取和写入输出

缺点: 扩展此解决方案以服务于不同类型的资源可能会很混乱或不可能。例如,从主机外壳运行程序

RESTFUL/Web服务方式

与unix域套接字方法也非常相似,但这里讨论的是HTTP。您仍然以不同的方式编写客户机/服务器程序。但是,这比第一种策略更麻烦,因为您需要额外的步骤来查找docker0网络接口的ip地址。这是为了让您知道容器如何连接到主机

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

缺点: 开发成本很高。对于您的用例来说,可能是超级杀伤力

结论

我可能只是走docker的路线

有一个cron作业来运行一个简单的shell脚本来运行df,处理它的输出,只需将TRUE或FALSE关键字写入文件


然后在容器中使用另一个shell脚本对该文件进行分类,以确定在需要关键字时是否触发其他脚本。

您的问题与此类似:但接受的答案似乎有缺陷。谢谢您的回答。我将检查线程中提供的可能解决方案是否也适用于我的情况。我将检查我们是否也可以获得凭据,或者他们是否可以向我们提供用于SSH到主机的密钥。谢谢如果你有想法,有没有办法检查我的容器和docker容器中的图像的空间使用情况?尝试在docker容器内运行df-vha,但它只显示整个docker的总空间使用情况,包括我们不关心的图像。@Vaanz您可以在主机上设置一个cron作业,每隔一分钟左右运行df命令,然后使用docker将结果复制到容器内的文件中cp@Vaanz使用ssh可能比这更好,因为信息更及时,并且在不需要的时候不总是运行
@Vaanz如果磁盘空间有问题,请购买更大的磁盘。与程序员的时间相比,磁盘是便宜的。RAM可能是一个更棘手的问题。容器中的进程显示在主机上的“从顶部显示”命令中,因此可以对其进行监视。非常感谢您的详细解释。我会检查每一个可能的解决方案,看看在我的情况下什么是更可行的。这是我们得到的更容易的解决方案。创建一个cron作业,监视磁盘使用情况,每隔几分钟将其存储在一个文件中,然后将该文件装载到docker容器中。是的,我同意此解决方案。它类似于通过挂载主机路径访问主机。这条路更直。