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

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


当前回答

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

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

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

其他回答

对我来说,这个工作得很好(感谢最后的注释指出目录/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容器是否正在运行。这对于帮助我找出即使在容器停止运行后也不应该保留的一些残留数据非常重要。

你可以在容器中运行bash: 运行ubuntu /bin/bash

我有一个未知的容器,它正在执行一些生产工作负载,不想运行任何命令。

所以,我使用docker diff。

这将列出容器已更改的所有文件,因此非常适合探索容器文件系统。

如果只获取一个文件夹,你可以使用grep:

docker diff <container> | grep /var/log

它不会显示来自docker映像的文件。根据您的用例,这可能有用,也可能没用。

得到最多好评的答案是,当容器实际启动时,它为我工作,但当它不可能运行时,例如,你想从容器中复制文件,这之前已经保存了我:

docker cp <container-name>:<path/inside/container> <path/on/host/>

多亏了docker cp (link),你可以直接从容器中复制,就像它是文件系统的任何其他部分一样。 例如,恢复容器内的所有文件:

mkdir /tmp/container_temp
docker cp example_container:/ /tmp/container_temp/

注意,您不需要指定要递归复制。