当前位置: 首页 > 面试题库 >

探索Docker容器的文件系统

咸亦
2023-03-14
问题内容

我注意到docker,我需要了解容器内部发生的情况或其中存在的文件。一个示例是从docker索引下载图像-您不知道该图像包含什么,因此无法启动该应用程序。

理想的情况是能够使用它们或等效方法。是否有工具可以做到这一点,或者我对docker的构想在认为我应该能够做到这一点上是错误的。


问题答案:

UPDATE
最简单的方法:使用docker exec

Docker 1.3或更高版本支持exec行为与相似的命令nsenter。该命令可以在已运行的容器中运行新进程(容器必须已运行PID
1进程)。您可以运行/bin/bash以探索容器状态:

docker exec -t -i mycontainer /bin/bash

请参阅Docker命令行文档

替代方法1
快照

您可以通过以下方式评估容器文件系统:

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

这样,您可以在准确的时间评估运行中的容器的文件系统。容器仍在运行,不包括将来的更改。

您可以稍后使用(不影响正在运行的容器的文件系统!)删除快照:

docker rmi mysnapshot

备用方法2
SSH

如果需要连续访问,可以将sshd安装到您的容器中并运行sshd守护程序:

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D

 # you need to find out which port to connect:
 docker ps

这样,您可以使用ssh运行应用程序(连接并执行所需的操作)。

更新:替代方法3
nsenter

使用nsenter,请参阅https://web.archive.org/web/20160305150559/http://blog.docker.com/2014/06/why-
you-dont-need-to-run-sshd-in-
docker/

简短的版本是:使用nsenter,您可以将shell放入现有容器中,即使该容器未运行SSH或任何特殊用途的守护程序



 类似资料:
  • 我注意到在使用docker时,我需要了解容器中发生了什么,或者容器中存在什么文件。一个例子是从docker索引下载图像--您不知道图像包含了什么,所以不可能启动应用程序。 理想的情况是能够将ssh转换到它们或等价物中。是否有一个工具可以做到这一点,或者是我对docker的概念化错误地认为我应该能够做到这一点。

  • 问题内容: 我有一个从Docker集线器提取的Docker映像。 当我运行时,容器立即退出。 我无权访问Docker映像的源代码,包括Dockerfile。我所拥有的只是我从中获得的图像。 我需要调试/查看映像中的内容(例如查看和浏览映像的文件系统),而无需将其作为容器运行。 可能吗? 问题答案: 从所需的图像启动容器,如下所示: 即使未连接STDIN仍保持打开状态 分配一个伪tty 梅子退出后停

  • 我需要访问非运行docker容器的文件系统。实现这一目标的最佳方式是什么? 谢谢

  • 「Allen 谈 Docker 系列」 DaoCloud 正在启动 Docker 技术系列文章,每周都会为大家推送一期真材实料的精选 Docker 文章。主讲人为 DaoCloud 核心开发团队成员 Allen(孙宏亮),他是 InfoQ 「Docker 源码分析」专栏作者,已出版《Docker 源码分析》一书。Allen 接触 Docker 近两年,爱钻研系统实现原理,及 Linux 操作系统。

  • 因此,我已经成功地从注册表下载并运行了dockerfile/nginx映像。我现在如何通过在其上启动bash终端来访问其文件系统? 也许我在概念上遗漏了一些东西。我需要ssh进入它吗?谢谢

  • 问题内容: 一般情况是,我们有一个服务器集群,并且我们想使用Docker在服务器集群之上建立虚拟集群。 为此,我们为不同的服务(Hadoop,Spark等)创建了Dockerfile。 但是,关于Hadoop HDFS服务,我们面临这样一种情况,即Docker容器可用的磁盘空间等于服务器可用的磁盘空间。我们希望限制每个容器的可用磁盘空间,以便我们可以动态生成具有一定存储大小的附加数据节点,以构成H