How to list files in a stopped Docker container

This question shows how to copy files out of a stopped container. This requires that I know the full path to the file including its file name. I know the directory I want to copy a file out of, but I do not know its file name since that is generated dynamically. How do I list the files in a directory in a stopped Docker container?

The following Docker command works great if the Docker container is running. But, it fails if the Docker container is stopped.

docker exec --privileged MyContainer ls -1 /var/log

Note: The files are not stored in a persistent volume.

43183 次浏览

另一个问题的答案 显示了如何使用另一个命令启动已停止的容器。下面是在已停止的容器中列出文件的命令。

  1. 将停止的容器提交到一个新映像: test_image
    • docker commit $CONTAINER_ID test_image
  2. 在带 shell 的新容器中运行新映像。
    • docker run -ti --entrypoint=sh test_image
  3. 在新容器中运行 list file 命令。
    • docker exec --privileged $NEW_CONTAINER_ID ls -1 /var/log

尝试使用 container-diff--type=file选项。这将比较两个图像和报告文件添加,删除和修改。

如果文件在启动容器后没有更改,那么您必须知道启动容器的原始图像的内容。因此,这个答案并不理想,但避免了创建和运行映像。

此工具要求您首先使用 docker commit创建停止的 Docker 容器的映像。

下面是安装它的命令:

curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 \
&& chmod +x container-diff-linux-amd64 \
&& mkdir -p $HOME/bin \
&& export PATH=$PATH:$HOME/bin \
&& mv container-diff-linux-amd64 $HOME/bin/container-diff

下面是使用该实用程序的命令:

container-diff analyze $IMAGE --type=file

如果您想查看某个文件内容,我建议使用 docker container cp命令。这是 医生。它适用于已停止的集装箱。例如:

docker container cp 02b1ef7de80a:/etc/nginx/conf.d/default.conf ./

通过这种方式,我得到了在启动过程中由模板引擎生成的配置文件。

当启动容器不是一个选项时,您总是可以导出您的映像(有点夸张,但是。.)并列出其内容:

docker export -o dump.tar <container id>


tar -tvf dump.tar

参考资料: Baeldung-探索一个 Docker 容器的文件系统

docker container cp <STOPPED_CONTAINER_ID>:<PATH_TO_FILE> -

注意命令末尾的“-”。

它实际上将指定的文件从停止的容器“复制”到“ stdout”。换句话说,它只打印文件内容。

谢谢@azat-khadiev 的指导(我不知道你为什么得到这个答案... ...)

命令 docker diff *CONTAINER*将列出容器启动后添加、删除和更改的文件。

如果文件在启动容器后没有更改,那么您必须知道启动容器的原始图像的内容。因此,这个答案并不理想,但避免了创建和运行映像。

container-diff不同,此命令不需要首先创建 Docker 映像。