我注意到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