探索Docker容器的文件系统

我已经注意到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 ,请参阅http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/

简短版本是:使用nsenter,即使该容器不运行SSH或任何种类的专用守护进程,也可以将shell放入现有容器中

更新 - 方法4:码头执行

Docker版本1.3(最新,您可能需要使用docker apt repo来安装截至2014年11月的最新版本)支持与nsenter类似的新命令exec 。 该命令可以在已经运行的容器中运行新进程(容器必须已经运行PID 1进程)。 您可以运行/bin/bash来浏览容器状态:

docker exec -t -i mycontainer /bin/bash

请参阅Docker命令行文档


您可以将您的容器的文件系统归档为tar文件:

docker export adoring_kowalevski > contents.tar

即使您的容器已停止,并且没有任何shell程序(如/bin/bash此方法仍然有效。 我的意思是像来自Docker文档的hello-world这样的图像。


更新:探索!

这个命令应该让你探索一个正在运行的docker容器

docker exec -it name-of-container bash

一旦进入:

ls -lsa

或任何其他bash命令,如:

cd ..

这个命令应该让你探索一个docker镜像

docker run --rm -it --entrypoint=/bin/bash name-of-image

一旦进入:

ls -lsa

或任何其他bash命令,如:

cd ..

-it代表交互...和tty

链接地址: http://www.djcxy.com/p/18253.html

上一篇: Exploring Docker container's file system

下一篇: Docker Multi Host (Swarm) Persistence Storage