我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。

理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。


当前回答

我喜欢的理解容器内部发生什么的方法是:

暴露-p 8000 Docker运行-it -p 8000:8000镜像 在里面启动服务器 python -m SimpleHTTPServer

其他回答

对我来说,这个工作得很好(感谢最后的注释指出目录/var/lib/docker/):

chroot /var/lib/docker/containers/2465790aa2c4*/root/

这里,2465790aa2c4是运行容器的短ID(由docker ps显示),后面跟着一个星号。

这个答案将帮助那些(像我一样)想要探索docker卷文件系统的人,即使容器没有运行。

列出正在运行的docker容器:

码头工人ps

=>集装箱ID "4c721f1985bd"

查看本地物理机器上的docker卷挂载点(https://docs.docker.com/engine/tutorials/dockervolumes/):)

Docker inspect -f{{。坐骑}}4 c721f1985bd

=> [/tmp/接触-garren /tmp true rprivate]

这告诉我,本地物理机目录/tmp/container-garren被映射到/tmp docker卷目标。

知道本地物理机器目录(/tmp/container-garren)意味着我可以查看文件系统,无论docker容器是否正在运行。这对于帮助我找出即使在容器停止运行后也不应该保留的一些残留数据非常重要。

另一个技巧是使用原子工具来做如下的事情:

mkdir -p /path/to/mnt && atomic mount IMAGE /path/to/mnt

Docker映像将被挂载到/path/to/mnt,以便您检查它。

这将为映像启动一个bash会话:

Docker运行——rm -it——entrypoint=/bin/bash

容器的文件系统在docker的data文件夹中,通常在/var/lib/docker。要启动并检查正在运行的容器文件系统,请执行以下操作:

hash=$(docker run busybox)
cd /var/lib/docker/aufs/mnt/$hash

现在,当前的工作目录是容器的根目录。