我注意到在使用docker时,我需要了解容器中发生了什么,或者容器中存在什么文件。一个例子是从docker索引下载图像--您不知道图像包含了什么,所以不可能启动应用程序。
理想的情况是能够将ssh转换到它们或等价物中。是否有一个工具可以做到这一点,或者是我对docker的概念化错误地认为我应该能够做到这一点。
这里有几种不同的方法...
Docker 1.3版或更新版本支持命令exec
,其行为类似于nsenter
。此命令可以在已运行的容器中运行新进程(容器必须有已运行的PID 1进程)。您可以运行/bin/bash
来查看容器状态:
docker exec -t -i mycontainer /bin/bash
请参阅Docker命令行文档
您可以通过以下方式评估容器文件系统:
# 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
如果需要连续访问,可以将sshd安装到容器并运行sshd后台进程:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
这样,您就可以使用ssh(连接并执行您想要的内容)运行您的应用程序。
使用nsenter
,了解为什么不需要在Docker容器中运行SSHd
简短的版本是:使用nsenter,您可以将shell放入现有容器中,即使该容器不运行SSH或任何特殊目的的守护进程
问题内容: 我注意到docker,我需要了解容器内部发生的情况或其中存在的文件。一个示例是从docker索引下载图像-您不知道该图像包含什么,因此无法启动该应用程序。 理想的情况是能够使用它们或等效方法。是否有工具可以做到这一点,或者我对docker的构想在认为我应该能够做到这一点上是错误的。 问题答案: UPDATE 最简单的方法:使用docker exec Docker 1.3或更高版本支持行
问题内容: 我有一个从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