我注意到docker,我需要了解容器内部发生的情况或其中存在的文件。一个示例是从docker索引下载图像-您不知道该图像包含什么,因此无法启动该应用程序。
理想的情况是能够使用它们或等效方法。是否有工具可以做到这一点,或者我对docker的构想在认为我应该能够做到这一点上是错误的。
UPDATE 最简单的方法:使用docker exec
Docker 1.3或更高版本支持exec行为与相似的命令nsenter。该命令可以在已运行的容器中运行新进程(容器必须已运行PID 1进程)。您可以运行/bin/bash以探索容器状态:
exec
nsenter
/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或任何特殊用途的守护程序