探索Docker容器的文件系统

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

理想的情况是能够使用ssh将其转换为ssh或等效的格式。是否有一个工具可以做到这一点,或者我对docker的概念是错误的,因为我认为我应该能够做到这一点

这里有几种不同的方法

A) 使用docker exec(最简单)

Docker 1.3版或更新版本支持行为类似于nsenter的命令exec。此命令可以在已经运行的容器中运行新进程(容器必须已经运行PID 1进程)。您可以运行/bin/bash来查看容器状态:

docker exec-t-i mycontainer/bin/bash

请参阅Docker命令行文档

B) 使用快照

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

#查找正在运行的容器的ID:
docker ps
#从容器文件系统创建映像(快照)
docker提交12345678904b5 mysnapshot
#使用bash探索这个文件系统(例如)
docker run-t-i mysnapshot/bin/bash

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

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

docker rmi mysnapshot

C) 使用ssh

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

docker run-d-p22 mysnapshot/usr/sbin/sshd-d
#您需要找出要连接的端口:
docker ps

这样,您可以使用ssh运行应用程序(连接并执行您想要的内容)

D) 使用nsenter

使用nsenter,查看为什么不需要在Docker容器中运行SSHd

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

发表评论